上一節,我們學習了進製計數制及其相互轉換,這次我們來看下計算機中帶符號數的表示
在一般算術表示中使用「+」和「-」來表示正數與負數,而在計算機中使用「0」和「1」來表示正數和負數用「+」或「-」表示正負的數叫真值
用「0」或「1」表示正負的數叫機器數
原碼表示
二進位制數的最高位表示符號,0表示正,1表示負,數值部分用二進位制數絕對值表示
注:8位二進位制數原碼的最大數為01111111(+127),最小數為11111111(-127)0的原碼有兩種表示形式:00000000和10000000(+0和-0)
補碼表示
1.負數的真值變換為補碼的方法:將各位變反(0變1,1變0)然後在最低位加1注:當位數為8時,最大補碼為01111111=[+127]補,最小補碼為10000000=[-128]補(這考慮進製),0的補碼只有乙個,[0]補=00000000,[-128]補=10000000,[-1]補=111111112.負數的原碼變換為補碼:保持符號位不變,其餘各位變反,最低位加1
例:將-59變換為補碼
真值 -00111011
原碼 10111011
變反 11000100
加1 11000101
規則:[x+y]補=[x]補+[y]補[x-y]補=[x]補-[y]補=[x]補+[-y]補
注:其中[-y]補是對[y]補執行一次求補運算(求補運算是將原數連同符號位一起(不管是正還是負)按位求反,再在最低位加1)
例:x=24 y=8,求[24-8]補上面的作為入門吧,下面的這篇文章更詳細,大家可以參考下【詳解】原碼-反碼-補碼16 原碼 00010000
16 補碼 00010000
24 原碼 00011000
24 補碼 00011000
8的原碼 00001000
8的補碼 00001000
00011000-00001000=00010000
[-8]補是對[8]補進行求補運算,即11111000
00011000+11111000=100010000
帶符號數的編碼
這裡對定義不再贅述,直接記錄計算方法和心得。原碼 非常直觀的機器碼,與真值差別不大。正數前補0,後面照抄 負數前補1,後邊照抄。小數相同處理方法。反碼 解決負數加法運算問題,將減法運算轉換為加法運算。正數前補0,後面照抄 負數前補1,真值部分0變1,1變0 1001 11001 10110 結果 補...
Verilog 帶符號數操作
1 之前的筆記寫過 補碼 可知在fpga綜合成電路的時候最底層都是以補碼的形式在運算,正數的補碼就是本身,負數的補碼要取反 1。2 那麼verilog中程式設計的時候對程式設計人員來說,其實想不到現在的編譯器 quartus ii 9.1和ise10.1沒有問題,更高的版本應該更加可以了 都支援ve...
帶符號數的編碼 原碼 反碼 補碼
為什麼要引入帶符號數 在數制轉換中整數和小數部分不太一樣,類似的,正負數編碼方式不同,所以需要規定帶符號數 signed binary numbers 編碼規則 最高位為符號位,0為正,1為負,其餘位為數值位 範圍 二進位制正負數的一般定點 浮點有其他方法 方法 原碼反碼補碼在符號位是相同的 正數的...