Computer >> Máy Tính >  >> Lập trình >> C ++

Tìm một phần bổ sung cho một số nguyên trong C ++

Trong phần này, chúng ta sẽ xem cách tìm số 1 đầy đủ của một số nguyên. Chúng ta có thể sử dụng toán tử bổ sung để thực hiện tác vụ này rất nhanh, nhưng nó sẽ tạo ra giá trị bổ sung 32 bit (số nguyên 4 byte). Ở đây chúng tôi muốn bổ sung số n bit.

Giả sử chúng ta có một số nói là 22. Giá trị nhị phân tương đương là 10110. Giá trị bổ sung là 01001 giống với 9. Bây giờ câu hỏi đặt ra, làm thế nào để tìm giá trị này? Lúc đầu, chúng ta phải tìm số bit của một số đã cho. Giả sử số đếm là c (ở đây c =5 cho 22). Chúng ta phải thực hiện 5 giây. Vì vậy, đây sẽ là 11111. Để thực hiện điều này, chúng ta sẽ chuyển 1 sang trái c số lần, sau đó trừ 1 cho nó. Sau khi dịch 1 sang trái 5 lần, nó sẽ là 100000, sau đó trừ đi 1, do đó, nó sẽ là 11111. Sau đó, thực hiện phép toán XOR với 11111 và 10110 để nhận được phần bù.

Ví dụ

#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);
}

Đầu ra

One's Complement of 22 is: 9