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

CSAPP 閱讀筆記:有號整數溢位檢測

     編輯:關於C語言

溢位條件推導

假設 w 位元有號整數,範圍 [-2^{w-1}, 2^{w-1}-1]。

正溢位

x > 0, y > 0, x + y >= 2^{w-1}

等價判斷:x >= 2^{w-1} - y

負溢位

x < 0, y < 0, x + y < -2^{w-1}

等價判斷:x < -2^{w-1} - y

統一檢測表達式

// 錯誤:編譯器可能優化掉溢位檢查
if (x + y < x) ...  // 若 x,y 同為正,x+y 溢位為負,但編譯器假設無 UB 可能直接判斷 false

// 正確:先檢查條件再運算
if (y > 0 && x > INT_MAX - y) ...  // 正溢位
if (y < 0 && x < INT_MIN - y) ...  // 負溢位

C23 新特性

<stdckdint.h> 提供檢測溢位的內建函數:

int result;
if (ckd_add(&result, x, y)) { /* 處理溢位 */ }
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved