| 數值 | 原碼 | 反碼 | 補碼 |
|---|---|---|---|
| +5 | 0000 0101 | 0000 0101 | 0000 0101 |
| -5 | 1000 0101 | 1111 1010 | 1111 1011 |
從右向左掃描,遇到第一個 1 及其右側保持不變,左側全部取反
-5: 絕對值 0000 0101
從右掃描:第一個1在最低位
右側(無)保持,左側取反 → 1111 1011
A - B = A + (-B)0000 0000),原碼/反碼有 +0 和 -0 兩種
signed char c = -5; // 內存中存儲補碼 1111 1011 (0xFB)
printf("%d\n", c); // 輸出 -5,編譯器自動按補碼解釋
printf("%x\n", c); // 輸出 fb,按無符號十六進制顯示位模式
~x(按位取反)= -x - 1(補碼性質)x & (-x) 取最低位 1(利用補碼特性)>>:算術右移保持符號位(補 1),邏輯右移補 0(C 標準對有符號數實現定義)