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