“&”---------按位与运算符
“|”----------按位或运算符
“^”---------按位异或运算符
“~”---------取反运算符
“>>”-------数据右移
“<<”-------数据左移
按位&运算
原理:仅当两个位操作数都为1,输出结果才为1,否则都输出为0。
例如二进制1010001,十进制81即a数;二进制1011000,十进制88即b数;
81&88等于
1010001
&
1011000
————————
1010000
按&运算的用途:能够屏蔽某bits(位),例如:需要屏蔽第三位数,则将一个数例如b数二进制1011000,b数1011000 &上 1110111 ;
则:
1011000 b数
&
1110111
——————
1010000------->由此可见b数的1011000 的第三位已经值0了
——————————————————————————————————————————————————————————————————————————————————————————————
按位|运算
原理:仅当两个位操作数都为0,输出结果才为0,否则都输出为1。
例如二进制1010001,十进制81即a数;二进制1011000,十进制88即b数;
81&88等于
1010001
|
1011000
————————
1011001
|或按位运算符的用途:
例如我们想将b数中的第0位和第1位的数都置1,所以我们可以
1011000 b数
|
0000011
——————
1011011---------->由此可见这个数的第0位和第1位已经置1
————————————————————————————————————————————————————————————
按位异或^运算
原理:仅当两个位操作数不同时,输出结果才为1,否则都输出为0。
例如二进制1010001,十进制81即a数;二进制1011000,十进制88即b数;
81&88等于
1010001
^
1011000
————————
0001001 --------->由此可见, 两个数的第0位和第3位都不同,所以异或后变成1,其余的都为0
^异或按位运算符的用途:
1、按位异或运算可以使特定的位取反
例如我们想将b数中的最高位和最低位取反,所以我们可以
1011000 b数
^
1000001
——————
0011001---------->由此可见b数的最高位变成0和最低位已经置1,完成特定位取反
2、直接交换两个变量的值
a=3,b=4
a 00000011
b 00000100
a ^=b;得出 a = 00000111
这是想b等于 00000011,只需要将b ^=a,这时b=00000011 也就是等于3;
而想a等于00000100,只需要将a ^=b,,也就是a = 00000111^00000011 = 00000100,完成变量的交换
————————————————————————————————————————————————————————
~取反运算符
取反运算符,顾名思义就是将每一位取反,也就是1变成0,0变成1;
例如:
~10000011 等于 01111100
——————————————————————————————————————————————————————
>>数据右移
将变量的各位按要求向右移动若干位,例如
a = 1111 1111 0000 0000 >>8
则a = 0000 0000 1111 1111
——————————————————————————————————————————————————————
>>数据左移
将变量的各位按要求向右移动若干位,例如
a = 1111 1111 0000 0000 <<8
则a = 0000 0000 0000 0000
注意:无论左移还是右移,当某位从一端移出时,另一端出现的空白将用0来补充,移去的位永远消失
用途:
移位操作可用于整数的快速乘除运算,左移一位等效于乘2,而右移一位等效于除以2。
如:x=7,二进制表达为:00000111,
x<<1 00001110,相当于:x=2*7=14,
x<<3 01110000,相当于:x=14*2*2*2=112
x<<2 11000000,x=192
在作第三次左移时,其中一位为1的位移到外面去了,而左边只能以0补齐,因而便不等于112*2*2=448,而是等于192了。当x按刚才的步骤反向移动回去时,就不能返回到原来的值了,因为左边丢掉的一个1,再也不能找回来了。
右移做除法,如:
x>>2 00110000 x=48
x>>3 00000110 x=48/8=6
x>>1 00000011 x=6/2=3