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

Posted 穿迷彩服的鲨鱼

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了比特位计数--C++ bitset 用法相关的知识,希望对你有一定的参考价值。


前言

给定一个非负整数 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.结果

在这里插入图片描述


总结

在这里插入图片描述

以上是关于比特位计数--C++ bitset 用法的主要内容,如果未能解决你的问题,请参考以下文章

java刷题--338 比特位计数

java刷题--338 比特位计数

浅析 c++ bitset 的用法

⭐算法入门⭐《递推 - 一维》简单04 —— LeetCode 338. 比特位计数

bitset用法

比特位计数