比特位计数–C++ bitset 用法

  • Post author:
  • Post category:其他





前言


给定一个非负整数 num。对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回。





一、示例

示例 1:

输入: 2

输出: [0,1,1]

示例 2:

输入: 5

输出: [0,1,1,2,1,2]



二、代码解析



1.比特位计数


代码如下(示例):

vector<int> countBits(int num) 
{
	vector<int> arr;
	for (int i = 0; i <= num; i++)
	{
		int index = bitset<32>(i).count();//计算二进制数中有多少个1
		arr.push_back(index);
	}
	return arr;
}



2.测试代码


代码如下(示例):

#include<vector>
#include<bitset>
#include <iostream>
using namespace std;

vector<int> countBits(int num) 
{
	vector<int> arr;
	for (int i = 0; i <= num; i++)
	{
		int index = bitset<32>(i).count();//计算二进制数中有多少个1
		arr.push_back(index);
	}
	return arr;
}

int main()
{
	vector<int> nums = countBits(5);
	for (int i = 0; i < nums.size(); i++)
	{
		cout << nums[i] << " ";
	}
}



3.结果

在这里插入图片描述



三、C++ bitset 用法

C++的 bitset 在 bitset 头文件中,它是一种类似数组的结构,它的每一个元素只能是0或1,每个元素仅用1 bit空间。



1.构造函数

bitset常用构造函数有四种,如下

    bitset<4> bitset1;  //无参构造,长度为4,默认每一位为0

    bitset<8> bitset2(12);  //长度为8,二进制保存,前面用0补充

    string str = "100101";
    bitset<10> bitset3(str);  //长度为10,前面用0补充
    
    char str2[] = "10101";
    bitset<13> bitset4(str2);  //长度为13,前面用0补充

    cout << bitset1 << endl;  //0000
    cout << bitset2 << endl;  //00001100
    cout << bitset3 << endl;  //0000100101
    cout << bitset4 << endl;  //0000000010101



2.一些函数

int main()
{
	cout << bitset<8>(5) << endl;
	cout << bitset<8>(5).count() << endl;	//2(count函数用来求bitset中1的位数,共有2个1)
	cout << bitset<8>(5).size() << endl;	//8(size函数用来求bitset的大小,一共有8位)

	cout << bitset<8>(5).test(0) << endl;	//true  (test函数用来查下标处的元素是0还是1,并返回false或true,此处[0]为1,返回true)
	cout << bitset<8>(5).test(1) << endl;	//false  (同理,[1]为0,返回false)

	cout << bitset<8>(5).any() << endl;		//true  (any函数检查bitset中是否有1)
	cout << bitset<8>(5).none() << endl;	//false  (none函数检查bitset中是否没有1)
	cout << bitset<8>(5).all() << endl;		//false  (all函数检查bitset中是全部为1)
}



3.结果

在这里插入图片描述




总结

在这里插入图片描述



版权声明:本文为m0_46208939原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。