機器數的原碼、反碼、補碼、移碼錶示以及浮點數的二進位制表示
初學計算機組成原理時,有點兒搞不清楚機器數的各種表示方法。今天在這裡總結一下,希望對大家有幫助。
首先明確兩個概念,機器數是指將”+”和”-“數字化的數,其中用”0”表示”+”,”1”表示”-“。而對應的有”+”和”-“的數則稱為真值。
機器數的表示方法:
1、原碼錶示法
符號位0表示正數,符號位1表示負數。數值位為真值的絕對值。
+0.1011 原碼為->0.1011
-0.1011 原碼為->1.1011
+1100 原碼為->0,1100
-1100 原碼為->1,1100
整數符號位和數值位之間用逗號隔開,小數符號位和數值位之間用小數點隔開
2、補碼錶示法
正數的補碼為符號位加其本身,負數的補碼為符號位加其絕對值求反加一
+1010 補碼為->0,1010
-1101 補碼為->1,0011
+0.1001 補碼為->0.1001
-0.0110 補碼為->1.1010
+0和-0的補碼均為0.0000
3、反碼錶示法
正整數的反碼為符號位加其本身,負數的反碼符號位加其各位取反
+1101 反碼為->0,1101
-1101 反碼為->1,0010
+0.0110 反碼為->0.0110
-0.0110 反碼為->1.1001
4、移碼錶示法
由於在計算機中不存在”,”,當真值用補碼來表示的話,由於符號位和數值部分一起編碼,則很難通過補碼的形式位元組判斷真值的大小。因此引入了移碼的概念。
移碼為真值加一個常數2^n,在移碼中0也是唯一的
數的浮點表示:
實際上計算機處理的數不一定是純小數或者是純整數。浮點數是由階碼j和尾數S兩部分組成。階碼包括階符和數值部分,尾數是小數,其位數反映了浮點數的精度
尾數的符號表示浮點數的正負。
根據IEEE標準
float 符號位 1 階碼 8 尾數 23 總位數 32
double 符號位 1 階碼 11 尾數 52 總位數 64
其中階碼用移碼錶示,階碼的真值都被加上一個偏移量。其中float的偏移量為127,double的偏移量為1023
求解312對應的浮點數的二進位制表示:
對應的浮點數為312.0,首先求312對應的二進位制數為:
100111000
從左算起第一個1後還有8位,則我們將這8位作為小數位,單精度浮點數的小數位有23位,則還要在這8為後加15個0,得00111000000000000000000
由於偏移量為127個單位,加上右移操作的8個單位,偏置量總共為135個單位,將135用二進位制表示為:
10000111
加上符號位0,得到最後二進位制浮點數為0100 0011 1001 1100 0000 0000 0000 0000