在 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

更新於:25-9 月-2019

3 千次瀏覽

開啟您的職業生涯

透過完成課程獲得認證

開始
廣告
© . All rights reserved.