基础知识:
-
或 &
-
与 |
-
非 !
-
异或 ^
-
左移 << 例:1<<1, 000…1 -> 000…10 ;相当于乘以二
-
右移 >> 例:2>>1, 000…10 -> 000…01 ;相当于除以二,(补位是根据符号位来补,符号位是啥就补啥)
-
int 32位
-
补码 :1 + 111…111 = 000…000
-
2 + 111...110 = 000...000
-
x的补码为 ~x + 1
-
0,1
-
2,3
-
4,5
-
6,7
-
0^1 = 1; i^1 = 0;
-
2^1 = 3; 3^1 = 2
-
找到配偶
lowbit(int x){
return -n & n;//返回最后一个一出现的位置
}
快速幂模板
int fastPower(int a,int b, int p){
int ans = 1 % p;//防止p == 1;
while(b){
if(b & 1){
ans = ans * a % p; //如果超出范围,需要 * 1ll
}
a = a * a % p;
b >>= 1;// b /= 2; 和这个作用一样
}
return ans;
}
解释:
a = 3, b = 7
b->111
a^1 = 3;
a^2 = 9;
a^4 = 81;
a^8 = 81*81;
a^7 = a^1 * a^2 * a^4;
每一位的乘。