// 5 的二进制
var num1 = 5
num1.toString(2)
// 00000101
// 那么-5的二进制就是 10000101
// 计算 -5的反码
5的原码 00000101
-5的原码 就是 10000101
符号位不变其他位取反
那么-5的反码 就是 11111010
// 还是以-5举例
上面-5的反码是 11111010 那它的补码加1就是
11111010 (-5的反码)
+ 00000001 (加1)
------------------
11111011 (补码)
00000011 (3 的二进制补码)
+ 00000101 (5 的二进制补码)
-----------
00001000
结果为 00001000 。
将结果转换回十进制,根据最高位的符号位决定正负:
结果为正数,因为最高位为 0,表示正数。
去除符号位 0,剩下的位数为 00001000,转换为十进制为 8。
因此,3 + 5 的结果是 2。
解释一下 -3 + 5 二进制运算过程
将 -3 和 5 转换为二进制数:
-3 的二进制原码:10000011 反码:11111100 补码: 11111101。
5 的二进制表示为 00000101。
执行二进制加法,考虑进位:
11111101 (-3 的二进制补码)
+ 00000101 (5 的二进制)
-----------
1 00000010 (结果的二进制补码,其中最高位表示进位,超出位舍去)
结果为 00000010,其中最高位的 1 表示进位。
将结果转换回十进制,根据最高位的符号位决定正负:
结果为正数,因为最高位为 0,表示正数。
去除符号位 0,剩下的位数为 00000010,转换为十进制为 2。
因此,-3 + 5 的结果是 2。
解释一下 -5 + 3 二进制运算过程
将 -5 和 3 转换为二进制数:
-5 的二进制原码:10000101 反码:11111010 补码:11111011
3 的二进制表示为 00000011。
执行二进制加法,考虑进位:
11111011 (-5 的二进制补码)
+ 00000011 (3 的二进制)
-----------
11111110 (结果的二进制补码,最后结果要原码展示)
因为最高位为 1,表示负数。
负数的反码 = 补码 -1
11111110
- 00000001
-----------
11111101
它的反码就是 11111101 取反的原码就是 10000010
因此,-5 + 3 的结果是 -2。
1.按位与&
按位与运算符(&)是将两个数的二进制位对应位置相与,如果都是1,则结果为1,否则为0。例如,3 & 5的结果为1。
00000011 (3的二进制)
00000101 (5的二进制)
-----------
00000001 (所以结果就是1,下面的运算同理)
2.按位或 |
将两个数的二进制位对应位置相或,如果有一个是1,则结果为1,否则为0。
3.按位异或 ^
将两个数的二进制位对应位置不一样就是1,一样就是0。
4.按位取反 ~
按位取反运算符是将一个数的二进制表示中的0变为1(符号位也会取反),1变为0。例如,~3的结果为-4。
5.左移 <<
符号位不变,右侧补0。
6.右移 >>
符号位不变,并用符号位补高位
7.无符号右移 >>>
无符号右移运算符(>>>)是将一个数的二进制表示向右移动指定的位数,符号位要跟着右移,左侧补0。