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

หาส่วนเติมเต็มของจำนวนเต็มใน C++


ในส่วนนี้ เราจะมาดูวิธีการหาจำนวนเต็ม 1 ของจำนวนเต็ม เราสามารถใช้ตัวดำเนินการเสริมเพื่อทำงานนี้ได้อย่างรวดเร็ว แต่จะทำให้ค่าเสริม 32 บิต (จำนวนเต็ม 4 ไบต์) ที่นี่เราต้องการเสริมของตัวเลข n บิต

สมมติว่าเรามีตัวเลข 22 เลขฐานสองเท่ากับ 10110 ค่าที่เสริมกันคือ 01001 ซึ่งเหมือนกับ 9 ทีนี้คำถามก็มาถึง จะหาค่านี้ได้อย่างไร ขั้นแรกเราต้องหาจำนวนบิตของจำนวนที่กำหนด สมมติว่าการนับคือ c (ในที่นี้ c =5 สำหรับ 22) เราต้องทำ 5 1s นี่จะเท่ากับ 11111 ในการนี้ เราจะเลื่อน 1 ไปทางซ้าย c จำนวนครั้ง แล้วลบ 1 ออกจากมัน หลังจากขยับ 1 ไปทางซ้าย 5 ครั้ง มันจะเป็น 100000 แล้วลบ 1 ดังนั้นจึงเป็น 11111 หลังจากนั้นดำเนินการ XOR ด้วย 11111 และ 10110 เพื่อรับส่วนเสริม

ตัวอย่าง

#include <iostream>
#include <cmath>
using namespace std;
int findComplement(int n) {
   int bit_count = floor(log2(n))+1;
   int ones = ((1 << bit_count) - 1);
   return ones ^ n;
}
int main() {
   int number = 22;
   cout << "One's Complement of " << number << " is: " << findComplement(number);
}

ผลลัพธ์

One's Complement of 22 is: 9