参考:
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:代表红黄