1、按位与 &
规则:如果两个数相应的二进制都为1,则该位的按位与值为1,否则为0(全1为1)。
举例:12&14
12的二进制数是1 1 0 0
14的二进制数是1 1 1 0
12&14的结果为 1 1 0 0 = 12
2、按位或 |
规则:如果两个数相应的二进制只要有一个为1,则该位的按位与值为1,否则为0(有1为1)。
举例:12&14
12的二进制数是1 1 0 0
14的二进制数是1 1 1 0
12&14的结果为 1 1 1 0=14
3、按位异或 ^
规则:如果两个数相应的二进制相同为1,否则为0。
举例:12&14
12的二进制数是1 1 0 0
14的二进制数是1 1 1 0
12&14的结果为 1 1 0 1 = 13
4、取反 ~
规则:对一个二进制数按为进行取反,把1变为0,0变成1。
举例:12取反
12的二进制数是1 1 0 0
12取反的结果为0 0 1 1 = 3
5、左移运算符<<
规则:把一个数的二进制数向左移N位,右边补0。
举例:12<<2
12的二进制数是1 1 0 0
12<<2的结果为 1 1 0 0 0 0 = 48 = 12×2^2
也就是说在数字没有溢出的前提下,无论正数负数左移n位都相当于乘以2的n次方。
6、右移运算符>>
规则:把一个数的二进制数向右移N位,最高位是0(正数),左边补0;最高位是1(负数),左边补1。
举例:12>>2
12的二进制数是1 1 0 0,但是在计算机中一个数的最高位应该是符号位,即0(正数)或1(负数),这里我们可以把12的二进制数简单以一个字节的方式表示为:
0 0 0 0 1 1 0 0
标红的0即为符号位
12>>2的结果就为
0 0 0 0 0 0 1 1 = 3
再举一例:-12>>2
-12的二进制数是1 0 0 0 0 1 1 0
但这里我们不能将这个二进制数直接拿来进行右移计算,因为在计算机中数值存储的方式是以补码方式进行存储的,上面的12能够直接进行运算的原因是正数的原码、反码和补码都是一样的,关于负数的补码运算可以参考下面这篇文章:
原码、反码、补码之间的转换和简单运算_莫等闲的博客-CSDN博客_原码补码反码转换
由此可以得到-12的补码是
1 1 1 1 0 1 0 0
-12>>2的结果为
1 1 1 1 1 1 0 1 = -3
7、无符号右移>>>
规则:不管是正数还是负数,左边都补齐0。
举例:12>>>2
12的二进制数以一个字节的方式表示为:
0 0 0 0 1 1 0 0
12>>>2的结果为:
0 0 0 0 0 0 1 1 = 3
-12的二进制数(补码)为:
1 1 1 1 0 1 0 0
-12>>>2的值为
1 1 1 1 1 1 0 1 = 253