位运算及其用法
1、 异或 ^
参与运算的两个位,如果两个位相同结果为0,不同为1
0^0 = 0;
1^1 = 0;
1^0 = 1;
三个特点:
1、0 异或任意数还是任意数
2、1异或任意数等于任意数取反
3、任意数与自己异或相当于置零操作
性质
1、交换律
2、结合律 (a^b) ^c = a ^(b ^c)
3、对于任何数x,都有 x ^ x=0,x ^ 0=x
4、自反性: a^ b^ b=a^0=a;
用途:
1、用于不使用临时变量交换两个数(注意一点如果两个数相同就不能进行交换)例如交换a、b的值
a = a^b;
b = a^b;
a = a^b;
2、某些特定位进行反转:
例如对11100010的1、2位进行反转
11100010
^00000011
11100001
3、判断两个值是否相等
bool issam = a^b == 0;
2、与运算 &
两位同时为1,结果才为1,否则结果为0。
1^1 = 1
1^0 = 0
0^0 = 0
用途
与运算的用途:
1、清零
如果想将一个单元清零,即使其全部二进制位为0,只要与一个各位都为零的数值相与,结果为零。
1010101
&0000000
0000000
2、二进制数某一位清零
假设11101第三位置零
11101
1、首先1左移三位变成01000
2、取反10111
3、相与
11101
&10111
10101
3、取一个数的指定位
比如取数 1010 1110 的低4位
1、首先另外找一个数字第四位是1,其余位为0 (00001111)
2、相与
1010 1110
&0000 1111
0000 1110
4、取二进制数最右边的1
例如取1001 0100 最右边的1
1、首先取反 0110 1011
2、加一 0100 1100
3、相与
1001 0100
&0100 1100
0000 0100
5、判断奇偶
只要根据最未位是0还是1来决定,为0就是偶数,为1就是奇数。因此可以用:
a&1==0 来判断
3、或运算 |
参加运算的两个对象只要有一个为1,其值为1。
0|0=0
0|1=1
1|0=1
1|1=1
用途:
1、常用来对一个数据的某些位设置为1
例如1010 1110 的低4位设置为1
1、设置一个数字第四位为1其余位为0
0000 1111
|1010 1110
1010 1111
2、二进制的某一位置为1
例如1000 0101 第三位置为1
1、首先1左移三位0000 1000
2 、0000 1000
| 1000 0101
1000 1101