1.a+b
1 + 3
1:0001
3:0011
4: 0100
1|3:0011=3
无进位时a|b = a +b
有进位则不成立
计算思路:使用异或运算【不进位加法】忽略有进位的位置,再加上应该有的进位的位置。
所以我们可以这样:如果我们忽略有进位的位置后,再加上应该进位的位置,就是我们的值。
1 ^ 3: 0010 =3; 忽略进位
加上进位:0010
0010 ^ 0010:0000 忽略进位
再加上进位:0100
0000^0100:0100=4
0000&0100 为-0,没有需要继续进位
直到 没有应该进位的,最后结果即为返回值。
延伸:
位运算符:
| 按位或运算
& 按位与运算符
^ 异或运算
~取反运算
<< 左移运算符 将一个运算对象的各二进制全部进行左移若干位(左边的二进制进行丢弃,右边补0),操作数每左移一位,相当于x2
>>右移运算符 将一个运算对象的各二进制全部进行右移若干位(正数左补0,负数左补1,右边丢弃),操作数每右移一位,相当于 /2
原码 反码 补码
求一个负数的二进制: 1.该负数的正数的二进制取反,然后加1。记为这个负数的二进制。
求 -14 >>2 的值
1. -14的二进制: 14的二进制取反,加一 得到 1111 0010
2.右移2位: 1111 1100
3.1111 1100 的值为: 1111 1100 原码为 【1111 1100 先取反 1000 0011 在加 1 1000 0100】1000 0100,数值为-4
在计算机中 二进制使用 补码表示。 补码的补码即为原码