参考:

​https://zhuanlan.zhihu.com/p/404138226​​(知乎:位运算符的含义)

​https://www.jianshu.com/p/f0dbabf5f08c​​(简书:运算符的基本使用)

位运算符

1,共6种位运算符&,|,^,~,<<,>>,>>>

2,需要是二进制格式的数据,因为要按位运算

&

含义:按位与

说明:吧参与运算的两个数对应的二进制位相与,只有对应的二进制位均为1时,结果的对应为才为1,否则为0。

例子:



9&5相当于00001001&00000101,运算结果为00000001.输出结果是1。


|

含义:按位或

说明:把参数运算的两个数对应的二进制位相或,只要对应的两个二进制位有一个为1时,其结果就为1.

例子:



9|5相当于00001001|00000101,运算结果就是00001101,输出结果是13。


^

含义:按位异或

说明:把参数运算的两个数对应的二进制位相异或,对应位上的两个二进制数字不同时,结果为1,否则为0。

例子:



1^1=0,1^0=1,0^0=0,0^1=1


~

含义:取反

说明:把运算数的各个二进制位按位求反

例子:



~9相当于~(0000101),运算结果11110110。输出结果为-10。


<<

含义:左移

说明:m<<n是指把m对应的二进制数的各个二进制位向左移n位,高位丢弃,低位用0补齐。

例子:



设a=3,a<<4指把00000011的各二进制位向左移动4位,结果为00110000(十进制48)。


>>

含义:右移

说明:m>>n是指把m对应的二进制数的各二进制位向右移n位,低位丢弃,高位用0补齐,符号被保留。

例子:



设a=15,a>>2表示把00001111右移2位,结果为00000011(十进制3)。


>>>

含义:无符号右移

说明:m>>>n是指把m对应的二进制数的各二进制位向右移n位,低位丢弃,高位用0补齐。

例子:



19>>>2产生4,因为10011移位2位向右变为100,它是4。对非负数值,补零右移和带符号右移产生相同结果。


 



原码、反码、补码

·正数的原码、反码、补码相同



123的原码:00000000 00000000 00000000 01111011
123的反码:00000000 00000000 00000000 01111011
123的补码:00000000 00000000 00000000 01111011


· 负数的原码是按照绝对值转换后,最高位补1;反码是除符号位外,所有位取反;补码为反码加1;



-123的原码:10000000 00000000 00000000 01111011
-123的反码:11111111 11111111 11111111 10000100
-123的补码:11111111 11111111 11111111 10000101


 

使用场景

作为标志位

举例:



red = 0001
blue = 0010
yellow = 0100

0111:代表红蓝黄
0101:代表红黄