function add(num1, num2){
if(num2 == 0)
return num1;
let sum = num1 ^ num2;
let carry = (num1 & num2) << 1;
return add(sum, carry);
}
console.log(add(123,123))
function substract(num1, num2){
var subtractor = add(~num2, 1);
var result = add(num1, subtractor);
return result ;
}
console.log(substract(123,123))
function multiply(a, b) {
var multiplicand = a < 0 ? add(~a, 1) : a;
var multiplier = b < 0 ? add(~b , 1) : b;
var product = 0;
while(multiplier > 0) {
if((multiplier & 0x1) > 0) {
product = add(product, multiplicand);
}
multiplicand = multiplicand << 1;
multiplier = multiplier >> 1;
}
if((a ^ b) < 0) {
product = add(~product, 1);
}
return product;
}
console.log(multiply(4,4))
function divide_v2(a,b) {
var dividend = a > 0 ? a : add(~a, 1);
var divisor = b > 0 ? a : add(~b, 1);
var quotient = 0;
var remainder = 0;
for(var i = 31; i >= 0; i--) {
if((dividend >> i) >= divisor) {
quotient = add(quotient, 1 << i);
dividend = substract(dividend, divisor << i);
}
}
if((a ^ b) < 0){
quotient = add(~quotient, 1);
}
remainder = b > 0 ? dividend : add(~dividend, 1);
return quotient;
}