ปัญหา
เราต้องเขียนฟังก์ชัน JavaScript ที่รับตัวเลขสองตัว ฟังก์ชันควรคืนค่า true ถ้าตัวเลขทั้งสองมีบิต 1 ในรูปแบบทวินิยมที่ตำแหน่งเดียวกัน อย่างน้อย 2 ตำแหน่ง false ถ้าไม่ใช่
ตัวอย่าง
โค้ดตัวอย่างด้านล่าง:
const num1 = 10;
const num2 = 15;
const checkBits = (num1 = 1, num2 = 1) => {
let c = num1.toString(2).split('');
let d = num2.toString(2).split('');
if (c.length > d.length) {
c = c.slice(c.length - d.length);
} else {
d = d.slice(d.length - c.length);
}
let count = 0;
for (let i = 0; i < d.length; i++) {
if (c[i] === "1" && d[i] === "1") {
count++;
}
}
return count > 1;
};
console.log(checkBits(num1, num2));
ผลลัพธ์
true
คำอธิบายเพิ่มเติม
10 = 1010₂, 15 = 1111₂ จัดตำแหน่งขวา: 1010 และ 1111 บิต 1 ร่วมที่ตำแหน่ง 1 และ 3 (นับจากขวา 0-based) รวม 2 ตำแหน่ง → true วิธีเร็วกว่า: `(num1 & num2).toString(2).split('1').length - 1 >= 2`