想到哪寫到哪
交換兩個數字
void swap(int & a, int & b){
a ^= b;
b ^= a;
a ^= b;
}
判斷奇偶
if(1 == (n & 1)) // 奇數
if(0 == (n & 1)) // 偶數
乘以二和除以二
n << 1 // 乘以二
n >> 1 // 除以二
n << x // 乘以二的x次方
n >> x // 除以二的x次方
n << 1 | 1 // 乘以二然後加一
求最低位的1
#define lowbit(x) (x)&(-(x))
位運算實現加法
int add(int a, int b) {
if (0 == b) {
return a;
}
return add(a ^ b, (a & b) << 1);
}
位運算實現減法(從計算機組成原理裏面學到的)
int sub(int a, int b) {
return add(a, ~b + 1);
}
位運算實現乘法(快速冪的一個模板)
unsigned int mult(int a, int b) {
unsigned int ans = 0;
while (b) {
if (1 == (b & 1)) {
ans += a;
}
a = a << 1;
b = b >> 1;
}
return ans;
}
交換數字的二進制中相鄰的奇數位和偶數位
int exchange(int n) {
return ((n & 0xaaaaaaaa) >> 1) + ((n & 0x55555555) << 1);
}
找到該數字的二進制中有多少個1
int calc(int n) {
int count = 0;
while (n) {
n = n & (n - 1);
count++;
}
return count;
}