将bool转换为位序列
Translate bools to bit sequence
寻找一些操作符(我猜在+的地方?),将做
unsigned char bits = true + false + true + true + true; // 1 byte is sufficient
变成如下位模式:
00010111
那么如何检查if
中的位模式呢?if (bits == 00010111)
你想要
bits = true << 5 | false << 4 | true << 3 | true << 2 | true << 1;
或
bits |= true;
bits <<= 1;
bits |= false;
bits <<= 1;
bits |= true;
bits <<= 1;
bits |= true;
bits <<= 1;
bits |= true;
可以使用std::bitset
的字符串构造函数
#include <bitset>
#include <string>
#include <iostream>
int main() {
std::string bits;
bits.push_back('1');
bits.push_back('0');
bits.push_back('1');
bits.push_back('1');
bits.push_back('1');
std::bitset<8> bitset(bits);
std::cout << bitset.to_string();
}
有更好的方法。
为什么不用bitset呢?有一种方法可以设置各种位并将其转换为unsigned long。只需对其执行&
运算符即可获得字节
操作符+需要对当前值左移一位,然后对输入的true或false进行"按位或"运算,并返回该值
这是我想到的一个快速实现:
#include <iostream>
class Foo
{
int result;
public:
Foo() : result(0) {}
Foo(bool value) : result(value ? 1 : 0) {}
explicit Foo(int value) : result(value) {}
Foo operator+(bool value) const
{
std::cout << "adding " << value << std::endl;
return Foo((result << 1) | (value ? 1 : 0));
}
int get_result() const { return result; }
};
int main()
{
Foo x;
x = Foo(true) + false + true;
std::cout << x.get_result() << std::endl;
}
在这里试试
相关文章:
- 显式 std::exception_ptr 转换为 bool 不存在.VS2010 错误?
- 从标准::字符串到标准::矢量<bool>的快速转换
- 从标准::未来<void>到非标量标准::未来<bool>引发的错误转换
- 如果类对象需要在 C++ 中转换为 int,为什么会调用 "operator bool()"?
- 从nullptr_t转换为bool:有效与否
- 为什么这个GitHub项目将字符串转换为bool
- 我无法将'2D array whit bool'转换为"空 2D 数组布尔值"(用于生命游戏)
- 错误:无法将"dirent*"转换为"search_directories(std::string, std::list<start_tournament_info_t*>&, bool)
- 无法将“ bool”转换为“ gzfile {aka gzfile_s*}”
- C++变体用bool转换构造函数
- 为什么显式 bool() 转换在上下文转换中不发生
- 错误 C2440: 'type cast':无法从 'bool' 转换为 'CString'
- 将bool转换为QString
- 将向量<bool>转换为十进制(作为字符串)
- atlbase.h 编译器错误 :- 无法将参数从'bool'转换为'LPWSTR'
- 将矢量<bool>转换为整数
- 将 stl 向量<bool>转换为布尔 * 数组的快速方法
- 将bool转换为位序列
- 将 bool[] 转换为 std::string 的 void*
- 无法将'const bool'转换为 'jobject