一、异或
异或也叫半加运算,其运算法则相当于不带进位的二进制加法:二进制下用1表示真,0表示假,则异或的运算法则为:
0异或0=0,1异或0=1,0异或1=1,1异或1=0(同为0,异为1),这些法则与加法是相同的,只是不带进位。异或运算法则:
1. a ^ a = 0
2. a ^ b = b ^ a
3. a ^ b ^ c = a ^ (b ^ c) = (a ^ b) ^ c;
4. d = a ^ b ^ c 可以推出 a = d ^ b ^ c.
5. a ^ b ^ a = b.
6.若x是二进制数0101,y是二进制数1011
则x^y=1110
只有在两个比较的位不同时其结果是1,否则结果为0 即“相同为0,不同为1”!
两个十进制数值是怎么进行异或计算的,
例如:
5 异或 2 = ?
1.进行异或计算前会把数值都转换为二进制的:
5和2转为二进制分别为:0101 、0010
0101
异或
0010
=
0111
2.再把结果 0111 转换为十进制的:7
3.所以 5 异或 2 = 7 ,而不是大家想像的5和2不同,则为1(真).
二、按位与
参加运算的两个数据,按二进位进行“与”运算。如果两个相应的二进位都为1,则该位的结果值为1,否则为0。即
0&0=0;0&1=0;1&0=0;1&1=1;
例如:9&5可写算式如下:
00001001 (9的二进制补码)
&00000101 (5的二进制补码)
=00000001 (1的二进制补码)可见9&5=1。
按位与运算通常用来对某些位清0或保留某些位。例如把a 的高八位清 0 , 保留低八位,
可作 a&255 运算 ( 255 的二进制数为0000000011111111)。
应用:
a. 清零特定位 (mask中特定位置0,其它位为1,s=s&mask)
b. 取某数中指定位 (mask中特定位置1,其它位为0,s=s&mask)