咱們把一個數在計算機內被表示的二進制形式稱爲機器數,該數稱爲這個機器數的真值。機器數有固定的位數,具體是多少位與機器有關,一般是8位或16位。
原碼:是指符號位用0或1表示,0表示正,1表示負,數值部分就是該整數的絕對值的二進制表示。例如:假設機器數的位數是8,那麼:[+17]原=00010001 [-39]原=10100111
反碼:在反碼的表示中,正數的表示方法與原碼相同;負數的反碼是把其原碼除符號位之外的各位取反(即0變1,1變0)。一般,用[X]反表示X的反碼。例如: [+45]反 = [+45]原 = 00101101,[-32]原 = 10100000,[-32]反 = 11011111
補碼:在補碼的表示中,正數的表示方法與原碼相同;負數的補碼在其反碼的最低有效位上加1。一般用[X]補表示X的補碼。例如: [+14]補 = 10100100,[-36]反 = 11011011,[-36]補 = 11011100
實事求是地說,引入補碼意義非同尋常,能夠說是先輩們智慧的結晶。由於,經過補碼運算,能夠把減法運算變成加法運算;而乘法能夠用加法來作,除法能夠轉變成減法。這樣一來,加、減、乘、除四種運算「九九歸一」了。這對簡化CPU的設計很是有意義,CPU裏面只要有一個加法器就能夠作算術運算了。算法
所以只要能將數字轉化爲二進制機器數,那麼就能夠模擬計算機完成各類數值運算,實現加減乘除的功能。下面咱們來一塊兒將正負數的十進制數轉化爲二進制:
需求分析:輸入:一個十進制數,輸出:這個數的原碼,反碼和補碼。
實現:
一、正數的原碼反碼和補碼都是相同的,所以只要求出一個便可,咱們一般用棧來實現向二進制的轉換,blockly提供list做爲指針數組能夠實現棧的操做,以下圖所示:數組
棧操做實際上就是一種先進後出的數據結構:數據結構
咱們舉一個例子,好比求29的原碼,那麼過程以下:設計
list數組提供從頭尾插入和刪除元素,並能在指定位置提取元素:指針
所以咱們只要依次將求出的餘數從數組頭處插入便可,讀取數組的時候從頭至尾開始閱讀。數學
2.負數的原碼其實內容上和正數是同樣的,只是符號位與正數是不一樣的,咱們之因此把數設置成8位,就是爲了留出1位做爲符號位,所以8位數能夠表示-128~127,第一位表示符號位,0爲正數,1爲負數,因此-29二進制表示爲:10011101。
負數的反碼就是符號位不變,其他位取反,反碼的意義就在於進行下一步取補碼。負數的補碼就是反碼加1,求出補碼的算法就是從最後一位開始判斷,若是是0,就將其變爲1,若是是1,就判斷倒數第二位,依次類推,你能夠舉幾個例子自行判斷一下。it
有限狀態機,(英語:Finite-state machine,FSM),又稱有限狀態自動機,簡稱狀態機,是表示有限個狀態以及在這些狀態之間的轉移和動做等行爲的數學模型。它反映從系統開始到如今時刻的輸入變化,轉移指示狀態變動,而且用必須知足來確使轉移發生的條件來描述它;動做是在給定時刻要進行的活動的描述。 咱們舉一個例子,咱們平時在自動售貨機上買飲料,自動售貨機的內部實際上就是一個有限狀態機:
假若有這樣一個自動售貨機,售賣蘇打汽水,它有以下五種輸入:io
實現以下:class
其實咱們的小車就是經過有限狀態機來實現的,咱們能夠把小車的行爲依依列舉出來,好比左右轉,前進,發出聲波,光線,聲音等,咱們只要經過控制這些狀態就能控制小車完成各樣的工做:二進制
你能本身設計出一個更加複雜的售貨機麼?