C++ 中计算范围内的置位比特数
假设我们给定一个整数,例如 num,以及一个由左值和右值定义的范围。任务是首先计算该数字的二进制位,然后从左位循环到右位,并在给定的范围内计算置位比特数。
二进制数中的置位比特由 1 表示。当我们计算整数的二进制数时,它是由 0 和 1 组成的组合。因此,在计算机术语中,数字 1 被称为置位比特。
输入 − int number = 50, left = 2, right = 5
输出 − 范围内置位比特的总数为 - 2
说明:数字 50 的二进制表示为 110010,我们有一个从 left = 2 开始的范围(其比特为 1)到 right = 5 结束的范围(其比特为 1),并且在该范围之间只有 0。因此,计数为 2。
输入 − int number = 42, left = 3, right 4
输出 − 范围内置位比特的总数为 - 1
说明 − 数字 42 的二进制表示为 101010,我们有一个从 left = 3 开始的范围(其比特为 1)到 right = 4 结束的范围(其比特为 0),并且在该范围之间只有一个数字。因此,计数为 1。
下面程序中使用的方案如下
将数字输入到整数类型的变量中,以及具有左值和右值整数的范围。
声明一个名为 count 的变量,用于存储无符号整数类型的置位比特总数。
从 i 到 1<<7 和 i > 0 和 i 到 i / 2 开始 FOR 循环。
在循环内部,检查 num & 1 == TRUE 则打印 1,否则打印 0。
启动 while 循环以计算直到数字不为 0 的比特总数。
在循环内部,设置 count = count + number & 1,并设置 number >>=1。
设置一个临时变量,例如 a,其值为 ((1 << right) - 1) ^ ((1 << (left - 1)) - 1);。
此外,使用 count & a 设置 count。
打印 count。
示例
#include<iostream>
using namespace std;
//Count total bits in a range
unsigned int bits(unsigned int number, unsigned int left, unsigned int right){
unsigned int count = 0;
unsigned i;
//display the total 8-bit number
cout<<"8-bit digits of "<<number<<" is: ";
for (i = 1 << 7; i > 0; i = i / 2){
(number & i)? cout<<"1": cout<<"0";
}
//calculate the total bits in a number
while (number){
count += number & 1;
number >>= 1;
}
//calculate the set bit in a range
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
数据结构
网络
RDBMS
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP