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

การสลับบิตติดกันของทศนิยมเพื่อให้ได้ทศนิยมใหม่ใน JavaScript

ปัญหา

เราต้องเขียนฟังก์ชัน JavaScript ที่รับตัวเลข ฟังก์ชันควรวนผ่านค่าเทียบเท่าทวินิยมของตัวเลขและสลับบิตติดกันเพื่อสร้างทวินิยมใหม่ และสุดท้ายคืนค่าเทียบเท่าทศนิยมของทวินิยมใหม่

ตัวอย่าง

โค้ดตัวอย่างด้านล่าง:

const num = 13;
const swapBits = (num) => {
  let arr = num.toString(2).split('');
  if (arr.length % 2) {
    arr.unshift(0);
  }
  for (let i = 0; i < arr.length - 1; i = i + 2) {
    [arr[i], arr[i + 1]] = [arr[i + 1], arr[i]];
  }
  return +('0b' + arr.join(''));
};
console.log(swapBits(num));

ผลลัพธ์

14

คำอธิบายเพิ่มเติม

13 = 1101₂ → pad เป็น 01101 → swap คู่: 10 01 10 → 100110₂ = 38? แต่โค้ดคืน 14 เพราะ 13 = 1101 (4 บิต) pad → 01101 (5 บิต? ไม่คู่) → unshift 0 → 001101 (6 บิต) swap → 000111 = 7? ตรวจสอบ: 13=1101, pad to even=01101? โค้ด unshift ถ้า odd length: 1101→01101 (5 bits) ยังคง odd! บั๊ก: ควร unshift จนกว่าจะ even หรือใช้ bitwise: `(num & 0x55555555) << 1 | (num & 0xAAAAAAAA) >> 1`