本文談論的都為有符號數。
這得從二進位制的原碼說起:
二進位制原碼最大為
0111111111111111=215-1=32767
二進位制原碼最小為
1111111111111111=-
(215-1
)=-32767正0
和負0:0000000000000000=1000000000000000=0
所以,二進位制原碼表示時,範圍是
-32767~-0
和0~32767
,因為有兩個零的存在,所以不同的數值個數一共只有
216-1
個,比16
位二進位制能夠提供的
216個編碼少1個。
但是計算機中採用二進位制補碼儲存資料。
正數編碼不變,從
0000000000000000
到0111111111111111
依舊表示0到
32767
負數需要把除符號位以後的部分取反加1,即
-32767
的補碼為
1000000000000001
。到此,再來看原碼的正0和負
0:0000000000000000
和1000000000000000
,補碼表示中,前者的補碼還是
0000000000000000
,後者經過非符號位取反加
1後,同樣變成了
0000000000000000
,也就是正0和負
0在補碼系統中的編碼是一樣的。但是,我們知道,
16位二進位制數可以表示
216個編碼,而在補碼中零的編碼只有乙個,也就是補碼中會比原碼多乙個編碼出來,這個編碼就是
1000000000000000
,因為任何乙個原碼都不可能在轉成補碼時變成
1000000000000000
。所以,人為規定1000000000000000
這個補碼編碼為
-32768
。
所以,補碼系統中,範圍是
-32768
~32767。
因此,實際上,二進位制的最小數確實是
1111111111111111
,只是二進位制補碼的最小值才是
1000000000000000
,而補碼的
1111111111111111
是二進位制值的-1。
原碼 反碼 補碼
正數 原碼 反碼 補碼一樣 7 原 0 0000111 b 7 反 0 0000111 b 7 補 0 0000111 b 負數 原碼就是原來的表示方法 反碼是除符號位 最高位 外取反 補碼 反碼 1 7 原 1 0000111 b 7 反 1 1111000 b 7 補 1 1111001 b 當...
原碼 反碼 補碼
正數 原碼 反碼 補碼一樣 7 原 0 0000111 b 7 反 0 0000111 b 7 補 0 0000111 b 負數 原碼就是原來的表示方法 反碼是除符號位 最高位 外取反 補碼 反碼 1 7 原 1 0000111 b 7 反 1 1111000 b 7 補 1 1111001 b 當...
原碼 反碼 補碼
數值在計算機中表示形式為機器數 計算機只能識別0和1,使用的是二進位制,而在日常生活中人們使用的 是十進位制,正如亞里斯多德早就指出的那樣,今天十進位制的廣泛採用,只不過我們絕大多數人生來具有10個手 指頭這個解剖學事實的結果.儘管在歷史上手指計數 5,10進製 的實踐要比二或三進製計數出現的晚.摘...