int i = 1;
int i = i; // C++ 允許,第二個 i 指向第一個 i,值為 1
輸出 `1`。注意區分作用域。
int countOnes(int x) {
int c = 0;
while (x) { x &= (x - 1); ++c; } // 每次消除最低位 1
return c;
}
bool isPowerOfTwo(int x) {
return x > 0 && (x & (x - 1)) == 0;
}
C 標準未規定參數求值順序,編譯器通常**從右向左**壓棧,但**不可依賴**。
int a = 1;
printf("%d %d %d", a++, ++a, a); // 未定義行為
unsigned int a = 0xFFFFFFF7;
unsigned char c = (unsigned char)a; // 截斷低 8 位 -> 0xF7 (247)
char *p = (char*)&a; // 指針轉換影響訪問粒度
// *p 訪問第 0 字節 (0xF7),符號擴展為 -9 (0xFFFFFFF7)
unsigned char *q = (unsigned char*)&a; // *q = 0xF7 (247)
int add(int a, int b) {
while (b) {
int sum = a ^ b; // 無進位加
int carry = (a & b) << 1; // 進位
a = sum; b = carry;
}
return a;
}int max = ((a + b) + abs(a - b)) / 2;
a ^= b; b ^= a; a ^= b;
或算術法(可能溢出):`a = a + b; b = a - b; a = a - b;`