利用二進制最低位(LSB)特性:奇數 LSB=1,偶數 LSB=0。透過 & 1 即可高效判斷,無需取模運算。
#include <stdio.h>
void judge_odd_even(int a) {
if ((a & 1) == 0) {
printf("%d 是偶數\n", a);
} else {
printf("%d 是奇數\n", a);
}
}
int main() {
judge_odd_even(0); // 偶數
judge_odd_even(1); // 奇數
judge_odd_even(4); // 偶數
judge_odd_even(-3); // 奇數(負數補碼 LSB 同理)
return 0;
}
a & 1 只保留最低位:結果為 0 → 偶數;為 1 → 奇數。| 判斷 | 運算式 | 原理 |
|---|---|---|
| 2 的 n 次方 | (n & (n-1)) == 0 | 二進制僅一個 1 |
| 統計 1 的個數 | n &= (n-1) 迴圈計數 | 每次清除最低位 1 |
| 交換兩數 | a ^= b; b ^= a; a ^= b; | 異或交換無需暫存 |