Chúng tôi được yêu cầu viết một hàm JavaScript nhận vào một số và xác định xem nó có phải là lũy thừa của hai hay không.
Ví dụ -
f(23) = false f(16) = true f(1) = true f(1024) = true
Phương pháp tiếp cận -
Quyền hạn của hai ở dạng nhị phân luôn chỉ có một bit. Như thế này -
1: 0001 2: 0010 4: 0100 8: 1000
Do đó, sau khi kiểm tra rằng số lớn hơn 0, chúng ta có thể sử dụng phương pháp hack bitwise để kiểm tra số đó và chỉ một bit được đặt. Tương tự được hiển thị bên dưới -
num & (num - 1)
Ví dụ
Sau đây là mã -
const num1 = 256; const num2 = 1024; const isPowerOfTwo = (num = 1) => { if (num < 1) { return false; }; return (num & (num - 1)) === 0; }; console.log(isPowerOfTwo(num1)); console.log(isPowerOfTwo(num2)); console.log(isPowerOfTwo(1)); console.log(isPowerOfTwo(23));
Đầu ra
Sau đây là kết quả trên bảng điều khiển -
true true true false