原碼為第一位正負,第二位及以后為大小;
反碼:正數的反碼不變,負數的反碼為第一位(符號位)不變其余取反;
補碼:正數補碼不變,負數補碼為第一位(符號位)不變其余取反再加1,即為反碼加一。
小例子: 假設比特16位,
其中第一位是符號0為正,1為負;
所以也就是最大為0111111111111111
然后此時大小為0+2+4+8+-------+2的14次方=2的15次方-1;
即為最大范圍,最小為同理;
然而最小為-32768,最大為32767;經百度,知道有+0與-0。
+0的原碼為0000,0000,0000,0000,-0的原碼為1000,0000,0000,0000.
又因為-0的補碼為0000,0000,0000,0000與+0的補碼相同,重復,
經過百度:
“但是,我們知道,16位二進制數可以表示216個編碼,而在補碼中零的編碼只有一個,也就是補碼中會比原碼多一個編碼出來,那么我們可以知道 ,他就是1000000000000000,因為任何一個原碼都不可能在轉成補碼時變成1000000000000000。
所以,人為規定1000000000000000這個補碼編碼為-32768。 所以,補碼系統中,范圍是-32768~32767。”
所以,人為規定1000000000000000這個補碼編碼為-32768。 所以,補碼系統中,范圍是-32768~32767。”
“因此,實際上,二進制的最小數確實是1111111111111111,只不過二進制的補碼的最小值它才是1000000000000000,而補碼的1111111111111111是二進制值的-1。 ”
所以綜上,正負的那個最值數並不相同
比如:int類型是4字節,存放二進制的32位,同理最高位存放符號,他能存放的最大數就是2的31次方減1,也就是2147483647,而表面上最小的也是負2147483647,這樣他的原碼范圍就出來了,其正確范圍為-2147483648 - 2147483647,它們的正負都是不對稱的。
最后加上無負號情況
