驗證負數以補碼形式儲存

2021-07-24 21:56:56 字數 1054 閱讀 1916

已知:

1. 負數的補碼等於它的反碼加1,即在其反碼的最低位加1就為該數的補碼

2. 該系統中int型佔4位元組(32位二進位制),char型佔1位元組(8位二進位制)

3. 字元在記憶體中以ascii形式儲存(a的為65,c為67)

4. 在記憶體中低位址存低位值,高位址存高位值

先定義乙個int型負數:

如:int i= - 48829

可知其相應的原碼、反碼和補碼如下所示:

原碼:1000 0000 / 0000 0000 / 1011 1110 / 1011 1101    

反碼:1111 1111 / 1111 1111 / 0100 0001 / 0100 0010

補碼:1111 1111 / 1111 1111 / 0100 0001 / 0100 0011

假設該數在記憶體中的實際存放為:

low

(&i) 0100 0011

0100 0001

1111 1111

high

(&i+3) 1111 1111

然後用char型指標p1p2分別指向位址&i&i+1,並進行輸出,測試**如下所示:

#include 

int main(void)

分別得到p1輸出字母cp2輸出字母a,即說明了&i位址中的內容為0100 0011&i+1中的內容為0100 0001

==即驗證了是以補碼形式儲存的,而不是原碼或反碼!==

計算機為什麼採用補碼的形式儲存資料?

在計算機內部,所有資訊都是用二進位制數串的形式表示的。整數通常都有正負之分,計算機中的整數分為無符號的和帶符號的。無符號的整數用來表示0和正整數,帶符號的證書可以表示所有的整數。由於計算機中符號和數字一樣,都必須用二進位制數串來表示,因此,正負號也必須用0 1來表示。通常我們用最高的有效位來表示數的...

負數在計算機中的儲存方式(2的補碼)

問乙個基本的問題。負數在計算機中如何表示?舉例來說,8在計算機中表示為二進位制的1000,那麼 8怎麼表示呢?很容易想到,可以將乙個二進位制位 bit 專門規定為符號位,它等於0時就表示正數,等於1時就表示負數。比如,在8位機中,規定每個位元組的最高位為符號位。那麼,8就是00001000,而 8則...

負數在計算機中如何表示?為什麼用補碼儲存

問 負數在計算機中如何表示?舉例來說,8在計算機中表示為二進位制的1000,那麼 8怎麼表示呢?很容易想到,可以將乙個二進位制位 bit 專門規定為符號位,它等於0時就表示正數,等於1時就表示負數。比如,在8位機中,規定每個位元組的最高位為符號位。那麼,8就是00001000,而 8則是100010...