首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> C 語言問答

C語言補碼表示法完整圖解:從 8 位到 32 位的正負數編碼規則

     編輯:C 語言問答

基本概念

  • 原碼:符號位 + 絕對值二進制 (人類直觀,但加減需分正負處理)。
  • 反碼:正數同原碼;負數符號位不變,數值位按位取反。
  • 補碼:正數同原碼;負數 = 反碼 + 1。**計算機統一用補碼存儲/運算**。

19 的補碼表示演示

位寬二進制 (補碼)十六進制說明
8 位 (1 Byte)0001 00110x1316+2+1=19,高位補 0
16 位 (1 Word)0000 0000 0001 00110x0013高位補 0 (正數符號擴展)
32 位 (1 DWord)0000 0000 0000 0000 0000 0000 0001 00110x00000013高位補 0

負數補碼計算規則 (以 -19 為例,8 位)

  1. +19 原碼:0001 0011
  2. 按位取反 (反碼):1110 1100
  3. 加 1 (補碼):1110 1101 = 0xED

驗證:0x13 + 0xED = 0x100 (溢出丟棄進位) = 0 → 正確。

補碼編碼完整表 (8 位)


十進制  原碼          反碼          補碼(機器碼)
+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, 補碼獨有最小值)

關鍵優勢總結

  1. 統一加法器:減法 = 加負數補碼,硬體極度簡化。
  2. 無 -0:補碼中 0 唯一表示,節省一個編碼空間給 -128 (8 位)。
  3. 符號擴展簡單:正數高位補 0,負數高位補 1 (如 0xFF → 0xFFFF → 0xFFFFFFFF)。
  4. 溢出檢測:符號位進位 ≠ 最高數值位進位 → 溢出 (旁路進位邏輯)。

C 語言實戰驗證


#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;
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved