Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

การตรวจสอบว่าทศนิยมสองจำนวนมีบิต 1 ร่วมกันอย่างน้อย 2 ตำแหน่งใน JavaScript

ปัญหา

เราต้องเขียนฟังก์ชัน 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`