在说计算方式之前,先说一下计算机中的原码,反码和补码,计算机中存储的二进制都为数据的补码
符号位加上真值的绝对值 代码解读
复制代码+1: 0000 0001
-1: 1000 0001
正数的反码就是其本身,负数的反码实在其原码的基础上,符号位不变,其余部位取反 代码解读
复制代码+1: 0000 0001
-1: 1111 1110
正数的补码是其本身,负数的补码是在原码的基础上,符号位不变,其余各位取反,最好+1(即在反码的基础上+1) 代码解读
复制代码+1: 0000 0001
-1: 1111 1111
计算机中的计算方式都是二进制计算,下面说的计算方式中,均要把十进制转换为二进制进行计算
3 & 5 = 1 代码解读
复制代码3: 0011
5: 0101
0001 => 1
6 | 2 = 6 代码解读
复制代码6: 0110
2: 0010
0110 => 6
5 ^ 9 = 12 代码解读
复制代码5: 0101
9: 1001
1100 => 12
5 << 2 = 20 代码解读
复制代码5: 0000 0101 左移两位: 0001 0100 => 20
5 >> 2 = 1 代码解读
复制代码5: 0000 0101 右移两位: 0000 0001 => 1
下面的计算例子采用8位表示
6 >>> 2 = 1 代码解读
复制代码6: 0000 0110 >>> 0000 0001 => 1
-6 >>> 2 = 33 代码解读
复制代码-6 1000 0110 >>> 0010 0001 => 33
~5 = -6 代码解读
复制代码5: 0000 0101 ~ 1111 1010 = -6
例如:6 - 2 = 6 + (-2) = 4 下面的二进制码均为补码 代码解读
复制代码0000 0110 - 0000 0010 = 0000 0110 + 1111 1110 = 0000 0100 = 4
原因如下:-1-127 = -128 代码解读
复制代码原码: 1000 0001 + 1111 1111
反码: 1111 1110 + 1000 0000
补码: 1111 1111 + 1000 0001
=> 1 1000 0000 => -128
-128 没有原码和反码,因为没有意义