六种常用位操作运算符原理及用途

“&”---------按位与运算符

“|”----------按位或运算符

“^”---------按位异或运算符

“~”---------取反运算符

“>>”-------数据右移

“<<”-------数据左移

按位&运算

原理:仅当两个位操作数都为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

原文地址:https://www.cnblogs.com/xqc123/p/12357345.html