C++中求最右邊設定位的位數


在這個問題中,我們給定一個數字N。我們的任務是列印該數字最右邊設定位的索引。

讓我們舉個例子來理解這個問題:

輸入 − 4

輸出 − 3

解釋 − 4的二進位制是100,最右邊設定位的索引是3。

為了解決這個問題,一個簡單的解決方案是將數字移位,直到遇到一個設定位,但是如果數字很大,這可能需要大量的計算。

一個更有效的解決方案是使用布林代數。為此,我們首先計算該數字的2的補碼,這將翻轉該數字的所有位,並將第一個設定位保留原樣。然後,我們將計算該數字及其2的補碼的按位與。這將導致一個只有一個設定位的數字,以及我們想要的位數。該解決方案將由該數字的log2 + 1給出。

這似乎有點複雜,讓我們用這種方法解決一個例子。

N= 10 , binary = 1010
2’s complement, 0101
1010 & 0101 = 0010
log2(2) = 1
1+1 = 2 which is the given index.

示例

程式演示了我們解決方案的實現:

 線上演示

#include <iostream>
#include <math.h>
using namespace std;
void rightSetBit(int N) {
   int bitIndex = log2(N & -N)+1;
   cout<<bitIndex;
}
int main() {
   int N = 10;
   cout<<"The rightmost Set bit of the number "<<N<<" is : ";
   rightSetBit(N);
   return 0;
}

輸出

The rightmost Set bit of the number 10 is : 2

更新於:2020年4月17日

311 次瀏覽

開啟您的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.