C語言 數的儲存 原碼 反碼 補碼

2022-06-28 02:36:10 字數 1767 閱讀 2481

a=6                                     a=-18

a 的原碼就是0000 0000 0000 0110        1000 0000 0001 0010

反碼:          0000 0000 0000 0110         1111 1111 1110 1101

補碼:          0000 0000 0000 0110         1111 1111 1110 1110

對於正數,它的反碼就是其原碼(原碼和反碼相同);

負數的反碼是將原碼中除符號位以外的所有位(數值位)取反,也就是 0 變成 1,1 變成 0。

對於正數,它的補碼就是其原碼(原碼、反碼、補碼都相同);負數的補碼是其反碼加 1。

在計算機記憶體中,整數一律採用補碼的形式來儲存。這意味著,當讀取整數時還要採用逆向的轉換,也就是將補碼轉換為原碼。將補碼轉換為

原碼也很簡單:先減去 1,再將數值位取反即可。

#include

main()

int a=6;設定斷點,除錯,單步執行兩步

檢視cpu視窗

= [0000 0000 0000 0110]補 + [1111 1111 1110 1110]補

= [1111 1111 1111 0100]補

=  [1111 1111 1111 0011]反

= [1000 0000 0000 1100]原

= -12

18 - 6 = 18 + (-6)

= [0000 0000 0001 0010]補 + [1111 1111 1111 1010]補

= [10000 0000 0000 1100]補

= [0000 0000 0000 1100]補

= [0000 0000 0000 1100]反

= [0000 0000 0000 1100]原

= 12

5 - 13 = 5 + (-13)

=  [0000 0000 0000 0101]補 + [1111 1111 1111 0011]補

= [1111 1111 1111 1000]補

= [1111 1111 1111 0111]反

= [1000 0000 0000 1000]原

= -8

13 - 5 = 13 + (-5)

= [0000 0000 0000 1101]補 + [1111 1111 1111 1011]補

= [10000 0000 0000 1000]補

= [0000 0000 0000 1000]補

= [0000 0000 0000 1000]反

= [0000 0000 0000 1000]原

= 8你看,採用補碼的形式正好把相差的 1 糾正過來,也沒有影響到小數減去大數,這個「補丁」真是巧妙。

小數減去大數,結果為負數,之前(負數從反碼轉換為補碼要加 1)加上的 1,後來(負數從補碼轉換為反碼要減 1)還要減去,正好抵消掉,所以不會受影響。

而大數減去小數,結果為正數,之前(負數從反碼轉換為補碼要加 1)加上的 1,後來(正數的補碼和反碼相同,從補碼轉換為反碼不用減 1)就沒有再減去,不能抵消掉,這就相當於給計算結果多加了乙個 1。

c語言使用定點格式儲存整數,使用浮點格式儲存小數

C語言原碼 反碼 補碼

原碼 反碼 補碼 計算機的基本儲存單元是位元組 byte 計算的的最小儲存單元是位 bit c語言當中的數被分為有符號數和無符號數 有符號數是 正數 負數 0 無符號數是 0 不帶符號的正數 對於無符號數和有符號數的0和正數,原碼 反碼 補碼一致 對於有符號數,最高位為符號位,0代表 1代表 對於有...

C語言 原碼 反碼 補碼

c語言 原碼 反碼 補碼 本文以12和 12 為例,簡要介紹正數和負數的原碼 反碼 補碼求解過程 注 本文均以c語言中整數int所佔4位元組32位形式來求解!正數原碼 反碼 補碼 1 求解方法 正數的原碼 反碼 補碼!2 例子 求解12的原碼 反碼和補碼?解 12對應的二進位制形式為 1100 原碼...

C語言的原碼,反碼,補碼

1 原碼表示 原碼表示法是機器數的一種簡單的表示法。其符號位用0表示正號,用 表示負號,數值一般用二進位制形式表示。設有一數為x,則原碼表示可記作 x 原。例如,x1 1010110 x2 一1001010 其原碼記作 x1 原 1010110 原 01010110 x2 原 1001010 原 1...