int,long long int的範圍和來源
阿新 • • 發佈:2019-02-02
計算機為什麼要用反碼儲存整型
這得從二進位制的原碼說起:
如果以最高位為符號位,二進位制原碼最大為0111111111111111=2的15次方減1=32767
最小為1111111111111111=-2的15次方減1=-32767
此時0有兩種表示方法,即正0和負0:0000000000000000=1000000000000000=0
所以,二進位制原碼錶示時,範圍是-32767~-0和0~32767,因為有兩個零的存在,所以不同的數值個數一共只有2的16次方減1個,比16位二進位制能夠提供的2的16次方個編碼少1個。
但是計算機中採用二進位制補碼儲存資料,即正數編碼不變,從0000000000000000到0111111111111111依舊錶示0到32767,而負數需要把除符號位以後的部分取反加1,即-32767的補碼為1000000000000001。
到此,再來看原碼的正0和負0:0000000000000000和1000000000000000,補碼錶示中,前者的補碼還是0000000000000000,後者經過非符號位取反加1後,同樣變成了0000000000000000,也就是正0和負0在補碼系統中的編碼是一樣的。但是,我們知道,16位二進位制數可以表示2的16次方個編碼,而在補碼中零的編碼只有一個,也就是補碼中會比原碼多一個編碼出來,這個編碼就是1000000000000000,因為任何一個原碼都不可能在轉成補碼時變成1000000000000000。所以,人為規定1000000000000000這個補碼編碼為-32768。
所以,補碼系統中,範圍是-23768~32767。
因此,實際上,二進位制的最小數確實是1111111111111111,只是二進位制補碼的最小值才是1000000000000000,而補碼的1111111111111111是二進位制值的-1。