C++中计算未设置位的数量


给定一个整数,例如num,任务是首先计算该数字的二进制位,然后计算该数字中未设置位的总数。

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

输入 − int number = 50

输出 − 数字中未设置位的总数为:3

说明 − 数字50的二进制表示为110010,如果我们将其计算为8位数字,则会在开头添加两个0。因此,数字中未设置位的总数为3。

输入 − int number = 10

输出 − 数字中未设置位的总数为:6

说明 − 数字10的二进制表示为00001010,如果我们将其计算为8位数字,则会在开头添加四个0。因此,数字中未设置位的总数为6。

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

  • 将数字输入到整数类型的变量中

  • 声明一个名为count的变量,用于存储已设置位的总数,其类型为unsigned int

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

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

  • 在循环内,增加数字中总位数的值。

  • 启动while循环以计算位总数,直到数字不为0

  • 在循环内,设置count = count + number & 1,并设置number >>=1

  • 将count设置为数字中的总位数 - 数字中已设置位的总数。

  • 打印count

示例

 在线演示

#include<iostream>
using namespace std;
//Count total unset bits in a number
unsigned int unset_bits(unsigned int number){
   unsigned int total_digits = 0;
   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";
      total_digits++;
   }
   //calculate the total unset bits in a number
   while (number){
      count += number & 1;
      number >>= 1;
   }
   count = total_digits - count;
   cout<<"\nCount of total unset bits in a number are: "<<count;
}
int main(){
   int number = 50;
   unset_bits(number);
   return 0;
}

输出

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

8-bit digits of 50 is: 00110010
Count of total set bits in a number are: 5

更新于:2020年10月31日

637 次浏览

启动您的职业生涯

通过完成课程获得认证

开始学习
广告