1、&二进制与
2 & 3 0B10 & 0B11 => 0B10 => 2
2、|二进制或
2 | 3 0B10 & 0B11 => 0B11 => 3
3、~二进制非
~3 = ~ 0B00000000 00000000 00000000 00000011 = 0B11111111 11111111 11111111 11111100 取反之后变成了负数是补码表示 需要求其原码:补码的补码等于原码 => 0B10000000 00000000 00000000 00000011 反码 => 0B10000000 00000000 00000000 00000100 反码+1取补码 = -4
4、^二进制异或
2 ^ 3 0B10 ^ 0B11 => 0B01 => 1
5、<< 左移
3 << 4 0B11 << 4 => 0B110000 => 48 相当于 3 * 2 ** 4 = 3 * 16 = 48
6、>> 二进制有符号右移
12 >> 2 0B1100 >> 2 => 0B0011 => 3 -12 >> 2 = 0B10000000 00000000 00000000 00001100 原码 => 0B11111111 11111111 11111111 11110011 反码 => 0B11111111 11111111 11111111 11110100 补码 >> 2 = 0B11111111 11111111 11111111 11111101 原码 => 0B10000000 00000000 00000000 00000010 反码 => 0B10000000 00000000 00000000 00000011 补码 = -3
7、>>> 二进制无符号右移
>>>与>>唯一的不同是它无论原来的最左边是什么数,统统都用0填充。
12 >>> 2 0B1100 >>> 2 => 0B0011 => 3 -12 >>> 2 = 0B10000000 00000000 00000000 00001100 原码 => 0B11111111 11111111 11111111 11110011 反码 => 0B11111111 11111111 11111111 11110100 补码 >>> 2 = 0B0011111111 11111111 11111111 111101 = 1073741821