C++:位集无法正常工作

C++: bitset doesn't work properly

本文关键字:常工作 工作 C++      更新时间:2023-10-16

我的项目需要一个std::bitset<64>。但在打印数字时出现了问题:

unsigned long long var = 18446462598732906495ULL;
std::cout << std::bitset<64>(var) << std::endl;

它打印:

0000000000000000000000000000000000000000000000001111111111111111

我希望它能打印:

1111111111111111000000000000000000000000000000001111111111111111

出了什么问题?

我在64位机器上使用DevC++。

您使用的bitset构造函数采用unsigned long而不是unsigned long long,因此编译器可能会丢弃不适合unsigned long的位。我认为您将不得不对输入值进行迭代,并单独设置位。

据我所见,在C++98中,位集有3个构造函数,其中一个是无符号长(在Windows 64中为32位)。

但是!在C++11中,它被纠正了,构造函数现在有无符号的long-long作为参数(在Windows 64上是64位)。

因此,更改您的设置以使用C++11标准

http://www.cplusplus.com/reference/bitset/bitset/bitset/