c++中 bitset例子运行结果

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++中 bitset例子运行结果相关的知识,希望对你有一定的参考价值。

string str("1111110011111111101");
bitset<16> f(str,5,4);
cout << f << endl; // 结果为何是0000000000001001 不应该是 0000000000001111?

因为bitset的构造函数bitset<str, pos,n> 里面, pos是str的起始位置,而n是个数(长度);
bitset<16> f(str,5,4);

构造的是16位的bitset,其值是str中第5个开始(主意是从0开始计数的)的位置,长度是4。 因此“11111{1001}1111111101” {}中的,正是第5个开始的4个字符长度。追问

从前数?

追答

从第5个开始,向后数4个。

参考技术A 字符串:1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 0 1
下 标: 0 1 2 3 4 5 6 7 8 9

f(str, 5, 4)表示从str中取下标为5开始的4个连续字符到f中
所以是1001追问

从前数?

追答

难道要从后数吗?

是否可以在 C++ 中将 bitset<8> 转换为 char?

【中文标题】是否可以在 C++ 中将 bitset<8> 转换为 char?【英文标题】:Is it possible to convert bitset<8> to char in c++? 【发布时间】:2012-06-19 13:24:08 【问题描述】:

我有bitset v8,它的值类似于“11001101”,如何将其转换为char?我需要一封信。比如字母“f”=01100110。

附:感谢帮助。我需要这个来说明位中的随机错误。例如,没有错误 f,有错误,比如 ♥,等等,所有文本都在文件中。在文本中您可以清楚地看到此类错误。

【问题讨论】:

拜托,你甚至没有改变示例值。 我认为这家伙实际上是在问如何将 bitset 转换为单个字符,而不是数组。 如果我理解这个问题是关于从整个位集中获取单个标量 char(),而不是数组 【参考方案1】:
unsigned long i = mybits.to_ulong(); 
unsigned char c = static_cast<unsigned char>( i ); // simplest -- no checks for 8 bit bitsets

上述内容应该可行。请注意,位字段可能包含无法使用普通 char 表示的值(它是否已签名由实现定义)——因此您应该在转换之前始终检查。

char c;
if (i <= CHAR_MAX) 
c = static_cast<char>( i );

【讨论】:

虽然如果它是bitset&lt;8&gt;,它不会包含不能在unsigned char 中表示的值。所以这可能是比char 更好的选择。您可以任由实现将超出范围的值转换为有符号类型。 我们不知道普通的char 是否已签名。我假设8 是一个例子。但我会解决的。 没错,这就是为什么我说unsigned char 可能是一个更好的选择,尽管只是“可能”,因为如果提问者真的需要char,那么你首先说的是正确的,他们应该检查价值。为什么假设8 是一个例子,它不仅在问题中陈述了两次,而且想要转换为char 是bitset 的自然大小。 “我如何将bitset&lt;127&gt; 转换为字符”本来是一个更愚蠢的问题...... @SteveJessop:是的。这是检查的原因之一。 我什至没有想过使用bitset&lt;8&gt; 而不是unsigned charuint8_t 的原因。我敢肯定有一些:-)【参考方案2】:

提供的解决方案对我不起作用。我在 g++ 9 中使用 C++14。但是,我能够通过以下方式获得它:

char lower = 'a';
bitset<8> upper(lower);
upper.reset(5);
cout << (char)upper.to_ulong() << endl;

我敢肯定,这可能不是最好的方法,但它对我有用!

【讨论】:

以上是关于c++中 bitset例子运行结果的主要内容,如果未能解决你的问题,请参考以下文章

bitset

C++优先队列例子

浅析 c++ bitset 的用法

在 C++ 中将 bitset 转换为 int

记录一个比较少用的容器C++ std::bitset

[C++] 用bitset代替bool数组的性能测试以及bitset的基本使用