| 位寬 | 二進制 (補碼) | 十六進制 | 說明 |
|---|---|---|---|
| 8 位 (1 Byte) | 0001 0011 | 0x13 | 16+2+1=19,高位補 0 |
| 16 位 (1 Word) | 0000 0000 0001 0011 | 0x0013 | 高位補 0 (正數符號擴展) |
| 32 位 (1 DWord) | 0000 0000 0000 0000 0000 0000 0001 0011 | 0x00000013 | 高位補 0 |
0001 00111110 11001110 1101 = 0xED驗證:0x13 + 0xED = 0x100 (溢出丟棄進位) = 0 → 正確。
十進制 原碼 反碼 補碼(機器碼)
+0 0000 0000 0000 0000 0000 0000
+1 0000 0001 0000 0001 0000 0001
+2 0000 0010 0000 0010 0000 0010
+127 0111 1111 0111 1111 0111 1111
-0 1000 0000 1111 1111 0000 0000 (同 +0,補碼無 -0)
-1 1000 0001 1111 1110 1111 1111 (0xFF)
-2 1000 0010 1111 1101 1111 1110 (0xFE)
-128 1000 0000 (無反碼) 1000 0000 (0x80, 補碼獨有最小值)
0 唯一表示,節省一個編碼空間給 -128 (8 位)。0xFF → 0xFFFF → 0xFFFFFFFF)。
#include <stdio.h>
#include <limits.h>
int main() {
signed char c = -19;
printf("signed char -19: 0x%02X (補碼)\n", (unsigned char)c); // 0xED
printf("INT_MIN = %d (0x%X)\n", INT_MIN, INT_MIN); // -2147483648
printf("INT_MAX = %d (0x%X)\n", INT_MAX, INT_MAX); // 2147483647
return 0;
}