เราจำเป็นต้องเขียนฟังก์ชัน JavaScript ที่รับค่าตัวเลขและกำหนดว่าเป็นกำลังสองหรือไม่
ตัวอย่างเช่น −
f(23) = false f(16) = true f(1) = true f(1024) = true
แนวทาง −
เลขยกกำลังสองในรูปแบบเลขฐานสองจะมีเพียงหนึ่งบิตเสมอ แบบนี้ −
1: 0001 2: 0010 4: 0100 8: 1000
ดังนั้น หลังจากตรวจสอบแล้วว่าตัวเลขนั้นมากกว่าศูนย์ เราสามารถใช้แฮ็คระดับบิตเพื่อทดสอบว่ามีการตั้งค่าบิตเดียวเท่านั้น ดังแสดงด้านล่าง −
num & (num - 1)
ตัวอย่าง
ต่อไปนี้เป็นรหัส -
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));
ผลลัพธ์
ต่อไปนี้เป็นผลลัพธ์บนคอนโซล -
true true true false