Calculate the sum of two integers a and b, but you are not allowed to use the operator +
and -
.
Example 1:
Input: a = 1, b = 2
Output: 3
Example 2:
Input: a = -2, b = 3
Output: 1
js推荐方法:
/**
* @param {number} a
* @param {number} b
* @return {number}
*/
var getSum = function(a, b) {
while(true){
let sum = a^b;
let carry = (a&b)<<1;
if(b == 0){
return a;
}
a = sum;
b = carry;
}
};
样例分析,a=5,b=-3 进行验证
let a = 5;
let b = -3;
//获取int的二进制表示方法
function getTwoExact(n)
{
if(n < 0){
n = -n;
n = n-1;
var str = (Array(32).join("0")+n.toString(2)).slice(-32);
str = exchange(str);
}else{
var str = (Array(32).join("0")+n.toString(2)).slice(-32);
}
return str;
}
var getSum = function(a, b) {
while(true){
let sum = a^b;
let carry = (a&b)<<1;
console.log('a=', a, ' bit is', getTwoExact(a));
console.log('b=', b, ' bit is', getTwoExact(b));
if(b == 0){
return a;
}
a = sum;
b = carry;
}
};
let c = getSum(a,b);
console.log(c);
上述过程打印的结果:
a= 5 bit is 00000000000000000000000000000101
b= -3 bit is 11111111111111111111111111111101
a= -8 bit is 11111111111111111111111111111000
b= 10 bit is 00000000000000000000000000001010
a= -14 bit is 11111111111111111111111111110010
b= 16 bit is 00000000000000000000000000010000
a= -30 bit is 11111111111111111111111111100010
b= 32 bit is 00000000000000000000000000100000
a= -62 bit is 11111111111111111111111111000010
b= 64 bit is 00000000000000000000000001000000
a= -126 bit is 11111111111111111111111110000010
b= 128 bit is 00000000000000000000000010000000
a= -254 bit is 11111111111111111111111100000010
b= 256 bit is 00000000000000000000000100000000
a= -510 bit is 11111111111111111111111000000010
b= 512 bit is 00000000000000000000001000000000
a= -1022 bit is 11111111111111111111110000000010
b= 1024 bit is 00000000000000000000010000000000
a= -2046 bit is 11111111111111111111100000000010
b= 2048 bit is 00000000000000000000100000000000
a= -4094 bit is 11111111111111111111000000000010
b= 4096 bit is 00000000000000000001000000000000
a= -8190 bit is 11111111111111111110000000000010
b= 8192 bit is 00000000000000000010000000000000
a= -16382 bit is 11111111111111111100000000000010
b= 16384 bit is 00000000000000000100000000000000
a= -32766 bit is 11111111111111111000000000000010
b= 32768 bit is 00000000000000001000000000000000
a= -65534 bit is 11111111111111110000000000000010
b= 65536 bit is 00000000000000010000000000000000
a= -131070 bit is 11111111111111100000000000000010
b= 131072 bit is 00000000000000100000000000000000
a= -262142 bit is 11111111111111000000000000000010
b= 262144 bit is 00000000000001000000000000000000
a= -524286 bit is 11111111111110000000000000000010
b= 524288 bit is 00000000000010000000000000000000
a= -1048574 bit is 11111111111100000000000000000010
b= 1048576 bit is 00000000000100000000000000000000
a= -2097150 bit is 11111111111000000000000000000010
b= 2097152 bit is 00000000001000000000000000000000
a= -4194302 bit is 11111111110000000000000000000010
b= 4194304 bit is 00000000010000000000000000000000
a= -8388606 bit is 11111111100000000000000000000010
b= 8388608 bit is 00000000100000000000000000000000
a= -16777214 bit is 11111111000000000000000000000010
b= 16777216 bit is 00000001000000000000000000000000
a= -33554430 bit is 11111110000000000000000000000010
b= 33554432 bit is 00000010000000000000000000000000
a= -67108862 bit is 11111100000000000000000000000010
b= 67108864 bit is 00000100000000000000000000000000
a= -134217726 bit is 11111000000000000000000000000010
b= 134217728 bit is 00001000000000000000000000000000
a= -268435454 bit is 11110000000000000000000000000010
b= 268435456 bit is 00010000000000000000000000000000
a= -536870910 bit is 11100000000000000000000000000010
b= 536870912 bit is 00100000000000000000000000000000
a= -1073741822 bit is 11000000000000000000000000000010
b= 1073741824 bit is 01000000000000000000000000000000
a= -2147483646 bit is 10000000000000000000000000000010
b= -2147483648 bit is 10000000000000000000000000000000
a= 2 bit is 00000000000000000000000000000010
b= 0 bit is 00000000000000000000000000000000
2
更多位运算相关的题目和解释: