【发布时间】:2015-02-07 07:10:39
【问题描述】:
我正在阅读问题convert bitset to int in c++ 并想,嘿,这行不通,我已经尝试过了。但后来我开始尝试,很快我发现:
#include <bitset>
#include <iostream>
int main()
{
std::bitset<31> b31(-1);
std::bitset<32> b32(-1);
std::cout<<static_cast<int>(b31.to_ulong())<<std::endl;
std::cout<<static_cast<int>(b32.to_ulong())<<std::endl;
return 0;
}
给出输出
2147483647
-1
那么,如何将小于 32 的位集转换为有符号整数?
澄清:我想用构造保留的位集时使用的 10 基值转换回带符号的 int。 “将签名的整数存储在位集中”
我在win 7上用gcc 4.6.2、mingw32试过这个,用c-style cast(int)得到同样的结果
【问题讨论】:
-
Fwiw,这会在带有 clang 3.5 的 OSX x64 上生成
-1 -1 -
不错不错!我正要问我是否误解了
to_ulong()规范,或者它是否是特定于编译器的。如果读者愿意尝试,了解其他编译器如何处理这个问题会很有趣,例如 MSVC、intel ;)
标签: c++ std bitset std-bitset