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

計算機系統原理(八)C語言有符號/無符號轉換、整數擴展與截斷

     編輯:組合語言

引言

承接上章整數編碼,本章討論位寬變換:擴展與截斷,並結合 C 語言隱式轉換陷阱。

C 語言有符號與無符號隱式轉換

有符號用補碼,無符號用無符號編碼。隱式轉換可能導致意外:

  • short i = -12345; unsigned short u = i; → u = 53191
  • 比較時有符號轉無符號:-1 < 0U 為假(0)

位擴展:零擴展 vs 符號擴展

  • 零擴展:高位補 0,用於無符號數,值不變。
  • 符號擴展:高位複製符號位,用於補碼。負數補 1 經取反加 1 仍保持原值。證明見圖:

位截斷

截斷高位可能失真。無符號截斷等價於取模:x mod 2^k。補碼截斷同樣保留低位位模式。證明見圖:

小結

理解擴展/截斷規則與 C 隱式轉換,能避免常見數值錯誤。

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