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

C 位運算判斷奇偶:i - (i >> 1 << 1) - 1 原理解析

     編輯:程式設計疑難解答

代碼

int oushu(int i) {
    return i - (i >> 1 << 1) - 1;
}

逐步推導

  1. i >> 1:算術右移 1 位,等價 i / 2 (向下取整)。
  2. (i >> 1) << 1:左移 1 位,等價 (i / 2) * 2,即**清除最低位**,得到不大於 i 的最大偶數。
  3. i - ((i >> 1) << 1):i 減去該偶數 → 餘數為 0 (偶數) 或 1 (奇數)。
  4. ... - 1:偶數變 -1 (非零 = true),奇數變 0 (false)。

真值表

i(i>>1)<<1i - ...return含義
440-1偶數 → true
5410奇數 → false

main 函數輸出

int x[] = {0,1,2,3,4,5,6,7,8,9,100,101};
for (int v : x) if (oushu(v)) printf("%d ", v);
// 輸出:0 2 4 6 8 100 (所有偶數)

現代寫法建議

// 可讀性優先
bool isEven = (i % 2 == 0);
// 或位運算
bool isEven = (i & 1) == 0;
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved