一:&(按位与)
1:i&1
int main()
{
for(int i=0;i<=20;++i){
if(i&1)
printf("ans = %d\n",i);
}
return 0;
}
运行结果:
2:i&2
int main()
{
for(int i=0;i<=20;++i){
if(i&2)
printf("ans = %d\n",i);
}
return 0;
}
运行结果:
&运算:只要答案中二进制不是所有位都为0则答案不为0
二:|(按位或)
i | x,只有i或x其中一个为0时,答案才为0
三:^(异或)
他的规则是:若参加运算的两个二进制位值相同则为0,否则为1
即0∧0=0,0∧1=1,1∧0=1, 1∧1=0
四:~(取反)
他是一元运算符,用于求整数的二进制反码,即分别将操作数各二进制位上的1变为0,0变为1。
五:<<(左移)
左移运算符是用来将一个数的各二进制位左移若干位,移动的位数由右操作数指定(右操作数必须是非负
值),其右边空出的位用0填补,高位左移溢出则舍弃该高位。
左移1位相当于该数乘以2,左移2位相当于该数乘以2*2=4,15<<2=60,即乘了4。但此结论只适用于该
数左移时被溢出舍弃的高位中不包含1的情况。
六:>>(右移)
对于无符号数n,每右移一位相当于除以2
eg:n = n>>3 等价于 n = n/2/2/2