C++ 中计算范围内的未设置位


给定一个整数,例如 num,以及具有左值和右值的范围。任务是首先计算数字的二进制数位,然后从左数位循环到右数位,然后在给定范围内计算未设置的位。

二进制数中的未设置位由 0 表示。当我们计算整数的二进制数时,它由 0 和 1 的组合形成。因此,数字 0 在计算机术语中被称为未设置位。

输入 − int number = 50, left = 2, right = 5

输出 − 范围内未设置位的总数为 - 2

说明 − 数字 50 的二进制表示为 110010,我们有一个从 left = 2(其位为 1)开始到 right = 5(其位为 1)结束的范围,并且在该范围之间我们有两个 0。因此,未设置位的数量为 2。

输入 − int number = 42, left = 1, right 6

输出 − 范围内未设置位的总数为 - 3

说明 − 数字 42 的二进制表示为 101010,我们有一个从 left = 1(其位为 1)开始到 right = 6(其位为 0)结束的范围,并且在该范围之间我们有三个 0。因此,计数为 3。

下面程序中使用的方法如下

  • 将数字输入到整型变量中,以及具有左值和右值范围的整数。

  • 声明一个变量 count 来存储设置位的总数,类型为无符号整数

  • 从 i 到 1<<7 并 i > 0 以及 i 到 i / 2 开始循环 FOR

  • 在循环内,检查 num & 1 == TRUE 则打印 1 否则打印 0

  • 从 i 到左值到右值开始循环 FOR

  • 在循环内,递增给定范围内的数字总数

  • 开始循环 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 unset bits in a range
unsigned int unset_bits(unsigned int number, unsigned int left, unsigned int right){
   unsigned int count = 0;
   unsigned int total_bits = 0;
   unsigned i;
   //display the 8-bit number
   cout<<"8-bit number of "<<number<<" is: ";
   for (i = 1 << 7; i > 0; i = i / 2){
      (number & i)? cout<<"1": cout<<"0";
   }
   //calculate total number of bits in a given range
   for(i = left; i<=right; i++){
      total_bits++;
   }
   //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;
   //subtract set bits from the total bits in a range
   count = total_bits - count;
   cout<<"\nCount of total unset bits in a range are: "<<count;
}
int main(){
   unsigned int number = 80;
   unsigned int left = 1, right = 4;
   unset_bits(number, left, right);
   return 0;
}

输出

如果我们运行上面的代码,它将生成以下输出:

8-bit number of 80 is: 01010000
Count of total unset bits in a range are: 2

更新于:2020-10-31

196 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告