【发布时间】:2010-10-06 22:37:33
【问题描述】:
在代码中,我有时会看到人们像这样以十六进制格式指定常量:
const int has_nukes = 0x0001;
const int has_bio_weapons = 0x0002;
const int has_chem_weapons = 0x0004;
// ...
int arsenal = has_nukes | has_bio_weapons | has_chem_weapons; // all of them
if(arsenal &= has_bio_weapons){
std::cout << "BIO!!"
}
但是在这里使用十六进制格式对我来说没有意义。有没有办法直接用二进制做呢?像这样的:
const int has_nukes = 0b00000000000000000000000000000001;
const int has_bio_weapons = 0b00000000000000000000000000000010;
const int has_chem_weapons = 0b00000000000000000000000000000100;
// ...
我知道 C/C++ 编译器不会编译这个,但必须有一个解决方法吗?是否可以在 Java 等其他语言中使用?
【问题讨论】:
-
我很好奇为什么十六进制表示法不适合你?一个数字就是一个数字。二进制符号更容易出现拼写错误,并且对于大量数字会变得非常陈旧。
-
二进制效果更好,因为使用 'and' 和 'or' 运算符的整个技巧适用于二进制格式,我希望能够看到位模式。设置了哪些位是直接可见的。即使是初学者也无需借助计算器即可阅读代码。
-
@EBGreen:当您对微控制器进行编程时,使用二进制表示法非常很有用。以至于一些 uC C 编译器实际上接受 0b00101010 形式的数字。
-
好吧,如果这是微控制器代码,那么当然可以。我不认为它是。
-
谨慎使用“arsenal &= has_bio_weapons”。我想你的意思是“(arsenal & has_bio_weapons) == has_bio_weapons”。
标签: c++