gpt4 book ai didi

c++ - 使用 a<32> 将 bitset 转换为 signed int

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:02:02 24 4
gpt4 key购买 nike

我正在阅读问题 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 基值转换回 signed int。 “将带符号的整数存储在位集中”

我已经在 win 7 上用 gcc 4.6.2 和 mingw32 试过了,用 c 风格的转换 (int)

得到了同样的结果

最佳答案

按照这些思路怎么样:

#include <bitset>
#include <iostream>

template<std::size_t B>
long bitset_to_long(const std::bitset<B>& b) {
struct {long x:B;} s;
return s.x = b.to_ulong();
}

int main()
{
std::bitset<31> b31(-1);
std::bitset<32> b32(-1);
std::cout << bitset_to_long(b31) << std::endl;
std::cout << bitset_to_long(b32) << std::endl;
return 0;
}

(灵感来自 Sign extending from a constant bit-width 。)

关于c++ - 使用 a<32> 将 bitset<a> 转换为 signed int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27378163/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com