原碼反碼補碼移碼的理解及C語言驗證

2021-08-08 06:21:27 字數 1471 閱讀 8551

正數的反碼和補碼都與原碼相同。

負數的反碼為對該數的原碼除符號位外各位取反。

負數的補碼為對該數的原碼除符號位外各位取反,然後在最後一位加1

原碼最好理解,但是加減法不夠方便,有兩個零

反碼解決了加減法的問題,還是有兩個零

補碼理解困難,但運算和表示非常方便。

理論理解起來還是不夠直觀,用一條數軸觀察乙個八位機器的數值表示:

-128                      -127                ····                 -1                          0                          1              ····            +127

原碼:     --                     1111 1111          ····            1000 0001          0000 0000          0000 0001       ····         0111 1111

1000 0000

反碼:      --                   1000 0000          ····           1111  1110           0000 0000         0000 0001       ····         0111 1111

1111  11111

補碼:1000 0000          1000 0001          ····           1111 1111            0000 0000         0000 0001       ····         0111 1111

從上面的數軸可以看出用補碼表示數值非常方便,形式非常簡潔:最高位為符號位,低位從小到大排列,只有乙個0,還能多表示乙個數。

除此之外:使用補碼,可以將符號位和數值域統一處理;加法和減法也可以統一處理;補碼與原碼相互轉換,其運算過程是相同的,不需要額外的硬體電路。因此在計算機系統中,數值一律用補碼來表示和儲存。

c語言驗證:

#include #include #define int_min 0x80000000

#define int_max 0x7fffffff

using namespace std;

int main()

{ //32位機器最大整數,輸出為:2147483647

計算機中原碼,反碼,補碼之間的關係

C 原碼 反碼 補碼 移碼

ps 精華全部在開頭部分,下面為細節部分 以 5 舉例 運算過程 原碼 反碼 補碼 移碼 反碼 在原碼的基礎上,符號位不動,其他位取反 任何正數的原始碼 反碼 補碼,而負數都是通過補碼表示的。補碼 在反碼的基礎上,運算 1 任何正數的原始碼 反碼 補碼,而負數都是通過補碼表示的。公式 兩數補碼的和 ...

原碼,補碼,反碼,移碼

為什麼有這些碼 定義機器字長為n,若數值x是純整數 若數值x是純小數,對純小數的原碼計算是先將其轉換為二進位制 必須的 例 若機器字長為8,則 1 原 0 0000001 1 原 1 0000001 7 原 0 0000111 127 0 1111111 127 原 1 1111111 7 原 1 ...

原碼,反碼,補碼,移碼

移碼 又叫增碼 是符號位取反的補碼,先將符號位取反,再取補碼,意思就是正數只將 變為1,負數將 變為0,再取補 x 1011 x 移 11011 符號位 1 表示正號 x 1011 x 移 00101 符號位 0 表示負號 一般用做浮點數的階碼,引入的目的是為了保證浮點數的機器零為全0。一 原碼 求...