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

หา One's Complement ของจำนวนเต็มใน C++


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

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

ตัวอย่าง

#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