位运算符:含义与使用

参考:

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

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

位运算符

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

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

& 含义:按位与

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

例子:

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

场景:

1,判断奇偶性

| 含义:按位或

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

例子:

9|5相当于00001001|00000101,运算结果就是00001101,输出结果是13。
1|2|4|8相当于0001|0010|0100|1000,运算结果就是00001111,输出结果是15。

场景:

1,作为标志位

^ 含义:按位异或

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

例子:

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

~ 含义:取反

说明:把运算数的各个二进制位按位求反,本运算符最令人费解,且没找到使用场景

参考:http://www.edu118.com/news/20190426/jswz090506.html

计算方法(十进制表示):~x =  -(x+1)  

例子:

~9相当于~(00001001),运算结果11110110。输出结果为-10~-9相当于~(11110111),运算结果00001000。输出结果为8。

1,因为计算机是用补码表示负数
2,负数的补码为反码+1
3,负数的反码为 除符号位(第一位)外其他位取反

 

<< 含义:左移

说明: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。对非负数值,补零右移和带符号右移产生相同结果。

 

原码、反码、补码

参考:https://blog.csdn.net/chenchao2017/article/details/79733278(原码,反码,补码原理)
现在计算机普遍使用补码表示负数。

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

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

 

posted @ 2021-10-25 16:38  小匡程序员  阅读(2855)  评论(0编辑  收藏  举报