我需要使用二进制数。
我试着写:
const char x = 00010000;
但它没有用。
我知道我可以使用与 00010000
具有相同值的十六进制数,但我想知道 C++ 中是否有二进制数的类型,如果没有,是否有另一种解决方案我的问题?
原文由 hamza 发布,翻译遵循 CC BY-SA 4.0 许可协议
我提名我的解决方案:
#define B(x) \
((((x) >> 0) & 0x01) \
| (((x) >> 2) & 0x02) \
| (((x) >> 4) & 0x04) \
| (((x) >> 6) & 0x08) \
| (((x) >> 8) & 0x10) \
| (((x) >> 10) & 0x20) \
| (((x) >> 12) & 0x40) \
| (((x) >> 14) & 0x80))
const uint8 font6[] = {
B(00001110), //[00]
B(00010001),
B(00000001),
B(00000010),
B(00000100),
B(00000000),
B(00000100),
B(00000000),
我以这种方式定义 8 位字体和图形,但也可以使用更宽的字体。如果编译器支持,可以定义宏 B 以生成 0b 格式。操作:二进制数被解释为八进制,然后位被屏蔽并一起移位。中间值受编译器可以使用的最大整数的限制,我猜 64 位应该没问题。
它完全由编译器处理,不需要运行时代码。
原文由 vjalle 发布,翻译遵循 CC BY-SA 4.0 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
您可以在等待 C++0x 时 使用
BOOST_BINARY
。 :)BOOST_BINARY
可以说比模板实现具有优势,因为它 也可以在 C 程序中使用(它是 100% 预处理器驱动的。)要进行相反的操作(即以二进制形式打印出一个数字),您可以使用不可移植的
itoa
函数,或 实现您自己的。- 不幸的是,您不能使用 STL 流进行基数 2 格式化(因为
setbase
只会支持基数 8、10 和 16),但您 可以 使用std::string
版本的itoa
,或(更简洁,但效率略低)std::bitset
。产生:
另请阅读 Herb Sutter 的 The String Formatters of Manor Farm 进行有趣的讨论。