Viết hàm trừ 2 số không sử dụng dấu - (dùng phép toán bitwise).
Giải pháp
Sử dụng phép trừ nhị phân: a - b = a + (~b + 1) hoặc thuật toán mượn bit.
const num1 = 56;
const num2 = 78;
const subtractWithoutMinus = (a, b) => {
// a - b = a + (~b + 1) = a + (-b trong bù 2)
// Dùng đệ quy với XOR và AND
if (b === 0) return a;
return subtractWithoutMinus(a ^ b, (~a & b) << 1);
};
console.log(subtractWithoutMinus(num2, num1)); // 78 - 56 = 22
Kết quả
Đầu ra trong console:
22
Giải thích: Mô phỏng phép trừ nhị phân: a ^ b là hiệu không nhớ, (~a & b) << 1 là nợ (borrow). Lặp cho đến khi không còn nợ.