按位与(a&b)
相同位的两个数字都为1,则为1;
若有一个不为1,则为0
按位或(a|b)
相同位只要一个为1即为1
按位异或(a^b)
相同位不同为1,相同位相同为0
按位取反(~a)
左移运算(a>>n)
左移运算左侧移出的位将舍弃,右边将补0
右移运算(a<<n)
右移运算较为复杂,除了移出的位将舍弃,若变量为无符号型,左侧将补0,若为有符号型,左侧将补1
应用1:奇偶校验求校验位
void parity_check(unsigned x)
{
int val=0;
while(x)
{
val^=x;//val 和x进行异或运算
x>>=1;//x右移一位
}
return val&0x1;//取末位运算. val的二进制形式最后一位位1则返回1,为0则返回0.
}
逻辑:对数据自身进行异或运算,如0^1=1,说明有奇数个1,再将结果与下一位异或,若下一位为1,相当于(0^1)^1,结果为0,即进行比较的三位中有偶数个1,同理,若下一位为0,则结果为1,即进行比较的三位中有奇数个1。上述程序中将辅助变量初始化为0。该程序通过移位运算实现数据各位间的异或运算,实际上辅助变量只有最后一位被用到。