编程基础---位运算符及其应用


一元运算符

与(&)

概念

两个位都为1时,结果才为1

例:0&0=0 0&1=0 1&0=0 1&1=1

用处

a.清零

只要与一个各位都为零的数值相与,结果为零。

b.判断奇偶

判断最后一位是0或1来判断是奇是偶。

偶(a & 1) == 0

奇(a & 1) == 1

c.去一个数的指定位

若是要取一个数的后四位,只需要利用一个后四位数均为1的数相与

或(|)

概念

两个位都为0时,结果才为0

例:0|0=0 0|1=1 1|0=1 1|1=1

用处

a.将某些位数转为1

将某个数与想转为一的位设置位1的数取或可以实现将该数的某些位数转成1

异或(^)

概念

两个位相同为0,相异为1

例:0^0=0 0^1=1 1^0=1 1^1=0

用处

a.翻转指定位

将要翻转的数的位找一个该位为1其与为0的数异或

b.交换两个数

void Swap(int &a, int &b){
    
    
   if (a != b){
    
    
     a ^= b;
     b ^= a;
     a ^= b;
   }
}

c.判断是否同号

a^b > 0 同号

a^b < 0 异号

取反(~)

概念

0变1,1变0

例:0^0=0 0^1=1 1^0=1 1^1=0

用处

a.将一个数最低位转为0

使a的最低位为0,可以表示为:a & 1。1的值为 1111 1111 1111 1110,再按"与"运算,最低位一定为0

左移(<<)

概念

各二进位全部左移若干位,高位丢弃,低位补0

例:1001<<1 = 10010

用处

a.可实现*2的操作

右移(>>)

概念

各二进位全部右移若干位,对无符号数,高位补0,有符号数,各编译器处理方法不一样,有的补符号位(算术右移),有的补0(逻辑右移)

例:1001>>1 = 100

用处

a.可实现/2的操作

复合运算符

&= 例:a&=b 相当于 a=a&b

|= 例:a|=b 相当于 a=a|b

>>= 例:a>>=b 相当于 a=a>>b
<<= 例:a<<=b 相当于 a=a<<b
^= 例:a^=b 相当于 a=a^b

参考文章:菜鸟教程位运算

Guess you like

Origin blog.csdn.net/weixin_52025712/article/details/121435335