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