在C ++中最右位的位置带有两个二进制数的第一个进位之和
在这个问题中,我们给了两个正整数N和M。我们的任务是打印最右边的位,该位在N和M的总和的二进制加法运算中生成第一个进位位。
让我们举个例子来了解这个问题,
输入-N=5,M=14
输出-3
说明-
(5)2 = 0101 , (14)2 = 1110 Sum 0101 + 1110 10011
为了解决这个问题,我们将考虑布尔布尔代数的一些观察。
当两个数字均为1时,总和将产生一个进位。因此,我们将找到产生进位的所有位。这将通过查找两个数字的和来完成。然后找到数字的最右边。
理解起来似乎有点复杂,让我们使用这种方法来解决一个例子。
N = 5 and M = 14 N&M = 0100
此处最右边的设置位在索引3处。
示例
显示我们解决方案实施情况的程序,
#include <iostream> #include <math.h> using namespace std; int rightSetBit(int N) { int bitIndex = log2(N & -N)+1; return bitIndex; } void rightCarryBit(int N, int M) { int carryIndex = rightSetBit(N & M); cout<<carryIndex; } int main() { int N=4, M=14; cout<<"The position of rightmost bit that generates carry in the sum of "<<N<<" and "<<M<<" is "; rightCarryBit(N,M); return 0; }
输出结果
The position of rightmost bit that generates carry in the sum of 4 and 14 is 3