作者: Fred F.M. Wang 原作日期 : 2004/12/9 修訂 : 2011/11/4
下面是一個計算機概論的問題
請問一個bitwise的問題
~3 = -4
3= 0011 (應該是32 bit)
~3=1100 (前面補於28個11)
答案是-4
可是為什麼只算到3 位(100=4),而其它的是signed符號用呢
-------------------------------------------------------------------------------------
電腦中的負數不是這麼算的。。。。。用八個位元來作說明的話。。。。。
1111 1111表示 -1,為什麼1111 1111表示-1,您加1的話就變成0000 0000,就符合了-1+1 = 0。
要換算的話,您知道首位元1表示負數,而數字的話是1111 1111取補數再加1,也就是0000 0001,也就是1,所以1111 1111換算過來是-1。
所以1111 1110表示-2,首位元1表示負數,數字的話就是1111 1110取補數再加1,也就是0000 0010,也就是2,所以1111 1110換算過來是-2。
1111 1100不是說取三個數來表示4,首位元1表示負數,而1111 1100取補數再加1,也就是0000 0100,也就是4,所以1111 1100換算過來是-4。
-------------------------------------------------------------------------------------
以上摘自www.jsptw.com
原來我們都忘記負數的二進位表示法
實際上是這樣子的
-1 : 1111 1111 不是 1000 0001
-2 : 1111 1110 不是 1000 0010
-3 : 1111 1101 不是 1000 0011
-4 : 1111 1100 不是 1000 0100
...
可以整理出下面的結論 :
1. 負數二進位經過反置再加一,就是其相反數(正數)的二進位數。
例如 : 1111 1110 --> 0000 0010
2. 正數二進位經過反置再加一,就是其相反數(負數)的二進位數。
例如 : 0000 0010 --> 1111 1110
3. 因此,一個數(不管正負數)的補數為其相反數減一
例如 : 4的補數為-5, -4的補數為 -(-4)-1 = 3
沒有留言:
張貼留言
歡迎提供意見, 謝謝 (註 : 留言經過版主審核通過才會發布)