作者:爱蜜儿小秋秋 | 来源:互联网 | 2023-09-25 23:33
先给出十转二的除法
2 60
30 0
15 0
7 1
3 1
1 1
0 1
60转二 111100
再介绍位运算符
a=60 b=13
A = 0011 1100
B = 0000 1101
-----------------
A&b = 0000 1100
A | B = 0011 1101
A ^ B = 0011 0001
~A= 1100 0011
A<<2=240
A>>2=60
>>>是右移补零操作符
其中取反运算符就是0 ~ -1 60 ~ -60
a^b 是取a和b分别为1的位
a&b是取a和b同时为1的位 ,也就是a+b要进位的位
而a+b=(a^b)+((a&b)<<1)=((a^b)^((a&b)<<1) )+((a^b)&((a&b)<<1))
每进行一次,(a&b)不为0的位越少,(a&b)为0时,a^b即为原a+b的和
给出异或实现加法的java代码
class Solution {
先考虑加法实现
a=a+b;
b=a-b;a是a b的和 a-b 就是之前的a 把a的值给b
a=a-b; a是a b的和 此时b是之前的a a-b就是之前的b
再给出位运算
a=a^b;
b=a^b;相当于a^b^b 把a的值赋给b
a=a^b;相当于a^b^a 把b的值赋给a