二进制字面量?

新手上路,请多包涵

在代码中,我有时会看到人们以十六进制格式指定常量,如下所示:

 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)?

原文由 Frank 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 918
2 个回答

我会使用位移运算符:

 const int has_nukes        = 1<<0;
const int has_bio_weapons  = 1<<1;
const int has_chem_weapons = 1<<2;
// ...
int dangerous_mask = has_nukes | has_bio_weapons | has_chem_weapons;
bool is_dangerous = (country->flags & dangerous_mask) == dangerous_mask;

它甚至比 0 的洪水还要好。

原文由 Tometzky 发布,翻译遵循 CC BY-SA 2.5 许可协议

自 C++14 以来,二进制文字是 C++ 语言的一部分。它是以 0b0B 开头的文字。 参考

原文由 Konstantin Burlachenko 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题