搜尋此網誌

2011年8月6日 星期六

2的補數(two's complement)

電腦儲存資料是用二進位的方式, 也就是binary. 最左邊的bit若為

0則代表+,若為1代表-
但是正負符號的要如何儲存在記憶體呢?

我們可
以使用2的補數系統來儲存.以下列出如何把一個負整

數轉化為2的補數的表示法.


我們以數字-36為例:

首先+36的二進位表示法為: 00100100

然後把每一個bit的0-->1,1--->0,變成11011011

然後從右端加入1個bit,變成 11011100

<2的補數轉回負整數>

也是一樣先轉化0為1,1為0
. 然後加1.

ex:
1111 1111
--->0000 0000
--->0000 0001
---> -1

<2的補數運算>
1.兩個正整數相加: 3+8=11

0000 0011 3
+0000 1000 8
-------------
0000 1011 11

2.兩個正整數相減: 8-3=8+(-3)=5

-3

0000 0000 0000 0011
-->1111 1111 1111 1100
-->1111 1111 1111
1101
so
0000 0000 0000 1000 (8)
+ 1111 1111 1111 1101 (-3)
----------------------------
0000 0000 0000 0101

3.小正整數減大正整數: 3-8=3+(-8)=-5

-8

-->000 1000
-->1111 0111
-->1111 1000

so
0000 0011
+ 1111 1000
---------------
1111 1011
由以下逆推得知1111 1011為-5
-->0000 0100
-->0000 0101= 5

沒有留言:

張貼留言