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
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP