在 C++ 中找出整數的 1 的補碼
在這一節,我們將看到如何尋找一個整數的 1 的補碼。我們可以使用補碼運算子非常快速地完成此任務,但會生成 32 位補碼值(4 位元組整數)。這裡我們希望生成n位補碼。
假設我們有一個數字,例如 22。它的二進位制等價項是 10110。補碼值為 01001,與 9 相同。現在的問題是,如何找到這個值?首先,我們必須找到給定數字的位數。假設計數為 c(此處,22 的 c = 5)。我們必須生成 5 個 1。因此,將是 11111。為了生成它,我們將把 1 向左移動c次,然後減去 1。在將 1 向左移動 5 次後,將變為 100000,然後減去 1,將變為 11111。接下來,使用 11111 和 10110 運算 XOR 運算以獲取補碼。
示例
#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
廣告
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP