问题陈述:
给您一个数字,如果以二进制格式表示该数字,则返回该数字的设置位数。
例:
如果输入数字为10,则二进制表示形式为1010。设置的位数为2。
这个问题可以通过两种方式解决。
- 通过在构建库中使用
- 通过一点操作
我们将看到两种方法。
通过使用内置库函数:
C ++提供了内置函数位集<32>()
它将int值转换为二进制,并使用“ count()”方法获取设置的位数。
例如:位集<32>(n).count()
通过使用位操作:
在位操作中,我们将使用按位和(&)和右移操作。
按位和(&):
要知道当前位的值是set还是unset bit,您需要按位进行(&)与当前位。
即
1
&1
——-
1
1
&0
——-
0
要移至下一位,请使用右移运算符(>>).
下面是如何计算设置的位数:
1010
&1
———
0
>>1
101
&1
———
1
>>1
10
&1
———
0
>>1
1
&1
———
1
因此,设置的总位数为2。
C ++解决方案
#include<iostream> using namespace std; void count_set_bits_by_bit_wise(uint32_t n) { int res=0; while (n!=0) { res += n&1; n = n >> 1; } cout<<"The number of set bits by using library function is = "<< res<<endl; } void count_set_bits_by_lib_function(uint32_t n) { cout<<"The number of set bits by using library function is = "<< bitset<32>(n).count()<<endl; } int main() { uint32_t num = 20; cout<< "The num in int value is = " <<num<<endl; cout<< "The num in binary format is = " << bitset<32>(num)<<endl; count_set_bits_by_bit_wise(num); count_set_bits_by_lib_function(num); return 0; }
该网站上可用的教程列表:
C编程20+章 | C ++编程80+章 |
100多个编码问题 | 数据结构和算法85+章 |
系统设计20+章 | Shell脚本编写12章 |
4g LTE 60+章节 | 最常见的编码问题 |
5G NR 50+章 | Linux系统编程20+章 |