我们给定一个整数,例如num和带有左右值的范围。任务是首先计算一个数字的二进制数字,然后设置从左数字到右数字的循环,然后在给定范围内计算设置的位。
二进制数中的设置位用1表示。每当我们计算一个整数值的二进制数时,它就会形成为0和1的组合。因此,数字1在计算机方面称为设置位。
输入-整数= 50,左= 2,右= 5
输出-范围内的总置位位数为-2
说明-:数字50的二进制表示为110010,我们有一个范围是从left = 2(其位为1)到right = 5(其位为1),在该范围之间,我们只有0。因此计数为2。
输入-整数= 42,左= 3,右4
输出-范围中的总置位位数为-1
解释-数字42的二进制表示为101010,我们有一个范围是从left = 3(其比特为1)到right = 4(其比特为0),在该范围之间,我们只有一位数字。因此计数为1。
在整数类型的变量中输入数字,并在范围内输入左右整数值。
声明一个变量计数以存储unsigned int类型的置位总数
从i到1 << 7并且i> 0和i到i / 2的启动循环
在循环中,检查num&1 == TRUE,然后打印1,否则打印0
启动循环,同时计算位数不为0的总位数
在循环内,设置count = count + number&1,还设置number >> = 1
设置一个临时变量,例如a(((1 << right)-1)^((1 <<(left-1))-1);
另外,用count和a设置count
打印计数
#include<iostream>
using namespace std;
//计算范围内的总位数
unsigned int bits(unsigned int number, unsigned int left, unsigned int right){
unsigned int count = 0;
unsigned i;
//显示总的8位数字
cout<<"8-bit digits of "<<number<<" is: ";
for (i = 1 << 7; i > 0; i = i / 2){
(number & i)? cout<<"1": cout<<"0";
}
//计算一个数字的总位数
while (number){
count += number & 1;
number >>= 1;
}
//计算范围内的设置位
int a = ((1 << right) - 1) ^ ((1 << (left - 1)) - 1);
count = count & a;
cout<<"\nCount of total set bits in a range are: "<<count;
}
int main(){
unsigned int number = 42;
unsigned int left = 2, right = 5;
bits(number, left, right);
return 0;
}输出结果
如果我们运行上面的代码,它将生成以下输出-
8-bit digits of 42 is: 00101010 Count of total set bits in a range are: 2