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

C語言數據類型取值範圍深度解析:以char為例探討補碼機制

     編輯:關於C語言

C語言數據類型取值範圍深度解析:以char為例探討補碼機制

C語言基本類型(char、short、int、long)均分為有號(signed)與無號(unsigned)兩種,浮點型(float、double)僅有有號版本。各類型的取值範圍由其二進制位寬與編碼方式決定。本文以 char(1 byte = 8 bits)為例,詳細推導其範圍 -2^7 ~ 2^7-1 的由來。

原碼表示的局限

若採用原碼:最高位為符號位(0 正、1 負),其餘 7 位為數值。
最大正數:01111111 = 2^7-1
最小負數:11111111 = -(2^7-1)
問題:10000000(-0)與 00000000(+0)皆代表 0,浪費一個編碼,且加減運算需單獨處理符號位,硬體實現複雜。

補碼編碼的優勢

現代計算機統一採用補碼存儲:

  • 正數補碼 = 原碼(含 00000000 代表 +0)。
  • 負數補碼 = 符號位不變,其餘位取反後加 1。

以 -1 為例:原碼 10000001 → 取反 11111110 → 加 1 → 11111111。
關鍵點:10000000(原碼 -0)的補碼運算結果為 00000000,與 +0 合併。因此 10000000 騰出來,人為規定其代表 -2^7(即 -128)。

最終範圍總結

類型位寬有號範圍無號範圍
char8-128 ~ 1270 ~ 255
short16-32768 ~ 327670 ~ 65535
int32-2^31 ~ 2^31-10 ~ 2^32-1

同理可推導其他整數類型。理解補碼機制不僅有助於掌握範圍,更能解釋溢出行為、位運算結果等底層現象。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved