在 C++ 中計算將 1 加到給定數字 N 後發生變化的位數


假設我們給定一個數字,例如 num,任務是計算將 1 加到該數字後發生變化的位總數。

數字的二進位制表示是將給定數字轉換為 0 和 1 的形式,可以透過多種方法實現。其中一種方法是計算給定數字與 2 的最小公倍數,如果餘數不為 0,則將該位設定為 1,否則設定為 0。

位的加法表如下:

0 + 1 = 1
1 + 0 = 1
0 + 0 = 0
1 + 1 = 1 ( 1 bit carry)

例如

Input − num = 10
Output − count is : 1

解釋 - 10 的二進位制表示為 1010,當加 1 後,表示變為 1011。很明顯,只有一位發生了變化,因此計數為 1。

Input − num = 5
Output − count is : 2

解釋 - 5 的二進位制表示為 101,當加 1 後,表示變為 110。很明顯,兩位發生了變化,因此計數為 2

下面程式中使用的方案如下:

  • 輸入整數型別的數字,例如 int num

  • 宣告一個變數來儲存計數,例如 int count

  • 再取一個變數,例如 temp,計算 num 的異或,並將其設定為 n ^ (n + 1)

  • 在 count 變數中呼叫 __builtin_popcount(temp)。此函式用於計算給定整數二進位制表示中數字的計數。它是 GCC 編譯器的內建函式。

  • 返回計數

  • 列印結果。

示例

 線上演示

#include <iostream>
using namespace std;
// Function to find number of changed bit
int changedbit(int n){
   int XOR = n ^ (n + 1);
   // Count set bits in xor value
   int count = __builtin_popcount(XOR);
   return count;
}
int main(){
   int n = 10;
   cout <<"count is: " <<changedbit(n);
   return 0;
}

輸出

如果我們執行以上程式碼,我們將得到以下輸出:

count is: 1

更新於: 2020-05-15

141 次瀏覽

開啟您的 職業生涯

透過完成課程獲得認證

立即開始
廣告

© . All rights reserved.