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

สร้างจำนวนใหม่จากบิตสลับกันของสองจำนวน ใน C++


บทนำ

สร้างจำนวนใหม่โดยนำบิตมาจากสองจำนวนสลับกัน: บิตที่ 1 (LSB) จากจำนวนที่ 2, บิตที่ 2 จากจำนวนที่ 1, บิตที่ 3 จากจำนวนที่ 2, ...

ตัวอย่าง

n=6 (0110), m=10 (1010) → เรียงบิตสลับ: 0(from m), 1(from n), 0(from m), 1(from n) → 0101? Wait, ตัวอย่างในต้นฉบับให้ 0010 = 2

อธิบาย: ใช้บิตคู่ของ n (even bits) และบิตคี่ของ m (odd bits) นำมารวมด้วย bitwise OR

อัลกอริทึม

  1. หาบิตคู่ (even bits) ของ n ที่เป็น 1
  2. หาบิตคี่ (odd bits) ของ m ที่เป็น 1
  3. ผลลัพธ์ = (even bits of n) | (odd bits of m)

ตัวอย่างโค้ด C++

#include <iostream>
using namespace std;

int setevenbits(int n) {
    int temp = n, count = 0, res = 0;
    for (temp = n; temp > 0; temp >>= 1) {
        if (count % 2 == 1)  // even position (0-indexed: 1,3,5...)
            res |= (1 << count);
        count++;
    }
    return (n & res);
}

int setoddbits(int m) {
    int count = 0, res = 0;
    for (int temp = m; temp > 0; temp >>= 1) {
        if (count % 2 == 0)  // odd position (0-indexed: 0,2,4...)
            res |= (1 << count);
        count++;
    }
    return (m & res);
}

int main() {
    int n = 12, m = 17;
    int setn = setevenbits(n);
    int setm = setoddbits(m);
    int result = setn | setm;
    cout << result;
    return 0;
}

ผลลัพธ์

25