已知:先定義乙個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
型指標p1
和p2
分別指向位址&i
和&i+1
,並進行輸出,測試**如下所示:
#include
int main(void)
分別得到p1
輸出字母c
,p2
輸出字母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...