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

นับจำนวนบิตที่เปลี่ยนหลังจากบวก 1 ให้กับ N ใน C++

เราได้รับตัวเลขหนึ่งตัว ให้เรียกว่า num และงานคือคำนวณจำนวนบิตทั้งหมดที่เปลี่ยนแปลงเมื่อเพิ่ม 1 ให้กับตัวเลข

การแสดงผลแบบไบนารีของตัวเลขทำได้โดยการแปลงตัวเลขที่กำหนดให้อยู่ในรูปของ 0 และ 1 ทำได้หลายวิธี วิธีหนึ่งคือการคำนวณ LCM ของตัวเลขที่กำหนดด้วย 2 และถ้าเศษไม่ใช่ 0 บิตจะตั้งค่าเป็น 1 มิฉะนั้นจะเป็น 0

ตารางการบวกสำหรับบิตคือ

0 + 1 = 1
1 + 0 = 1
0 + 0 = 0
1 + 1 = 1 (มีการขยาย 1 บิต)

ตัวอย่าง

อินพุต – num = 10 เอาต์พุต – count is : 1

คำอธิบาย – การแสดงแบบไบนารีของ 10 คือ 1010 และเมื่อเพิ่ม 1 แล้วจะกลายเป็น 1011 ชัดเจนว่ามีบิตเพียงหนึ่งตัวที่เปลี่ยนแปลง ดังนั้น count คือ 1

อินพุต – num = 5 เอาต์พุต – count is : 2

คำอธิบาย – การแสดงแบบไบนารีของ 5 คือ 101 และเมื่อเพิ่ม 1 แล้วจะกลายเป็น 110 ชัดเจนว่ามีบิตสองตัวที่เปลี่ยนแปลง ดังนั้น count คือ 2

วิธีการที่ใช้ในโปรแกรมด้านล่าง

  • รับตัวเลขประเภท integer ให้เป็น int num
  • ประกาศตัวแปรเก็บจำนวน ให้เป็น int count
  • ใช้ตัวแปรอีกตัวหนึ่ง ให้เป็น temp คำนวณ XOR ของ num และตั้งค่าเป็น n ^ (n + 1)
  • ในตัวแปร count เรียก __builtin_popcount(temp) ฟังก์ชันนี้ใช้คำนวณจำนวนบิตที่เป็น 1 ในการแสดงแบบไบนารีของจำนวนเต็ม เป็นฟังก์ชันในตัวของคอมไพเลอร์ GCC
  • คืนค่า count
  • พิมพ์ผลลัพธ์

ตัวอย่าง

#include <iostream>
using namespace std;

// ฟังก์ชันหาจำนวนบิตที่เปลี่ยน
int changedbit(int n){
    int XOR = n ^ (n + 1);
    // นับบิตที่เป็น 1 ในค่า XOR
    int count = __builtin_popcount(XOR);
    return count;
}

int main(){
    int n = 10;
    cout << "count is: " << changedbit(n);
    return 0;
}

เอาต์พุต

count is: 1