正數(shù)原碼與反碼、補(bǔ)碼一致;
負(fù)數(shù)反碼是將其原碼除符號位之外的各位求反,補(bǔ)碼是將反碼加1。
所以4樓的解釋是有問題的。
-5的二進(jìn)制的原碼是 1000 0000 0000 0101
反碼是 1111 1111 1111 1010
補(bǔ)碼是 1111 1111 1111 1011
----------------------------------------------------------------------------------------------
以下轉(zhuǎn)載,解釋有符號的數(shù)范圍為何是-(n+1)~n:
為什么要設(shè)立補(bǔ)碼呢?
第一是為了能讓計(jì)算機(jī)執(zhí)行減法:
[a-b]補(bǔ)=a補(bǔ)+(-b)補(bǔ)
第二個(gè)原因是為了統(tǒng)一正0和負(fù)0
正零:00000000
負(fù)零:10000000
這兩個(gè)數(shù)其實(shí)都是0,但他們的原碼卻有不同的表示。
但是他們的補(bǔ)碼是一樣的,都是00000000
特別注意,如果+1之后有進(jìn)位的,要一直往前進(jìn)位,包括符號位!(這和反碼是不同的!)
[10000000]補(bǔ)
=[10000000]反+1
=11111111+1
=(1)00000000
=00000000(最高位溢出了,符號位變成了0)
有人會問
10000000這個(gè)補(bǔ)碼表示的哪個(gè)數(shù)的補(bǔ)碼呢?
其實(shí)這是一個(gè)規(guī)定,這個(gè)數(shù)表示的是-128
所以n位補(bǔ)碼能表示的范圍是
-2^(n-1)到2^(n-1)-1
比n位原碼能表示的數(shù)多一個(gè)