ในส่วนนี้ เราจะมาดูวิธีการหาจำนวนเต็ม 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