【问题标题】:bitwise OR and AND in c++C ++中的按位或和与
【发布时间】:2022-10-13 17:03:08
【问题描述】:

我有

#define MS 0x0100|0x011

我需要检查 MS 中存在的 0x011。我使用 MS & 0x011 提供价值。但是 id MS & 0x10 也给出了真正的价值,我需要它作为假

【问题讨论】:

  • #define MS (0x0100|0x011)
  • (MS & 0x11 != 0x10) && (MS & 0x11 != 0x01) 怎么样?
  • 如果你和多个位,你检查是否任何位的设置。如果所有位都已设置,则不会。
  • 仅当存在 0x011 时我才需要真值,因为我将检查从 1 到 10 的循环,但对于其他值,它也会给出真值,任何其他方式来实现这一点
  • “我需要检查 MS 中存在的 0x011”听起来你需要一个函数contains(MS, 0x011),你为什么要发布一个#define 宏?

标签: c++ bitwise-operators


【解决方案1】:

(已编辑) 你需要

((MS) & 0x11) == 0x11

感谢 lorro 的评论

【讨论】:

  • 我不确定它是否会起作用:它会导致MS 中的| 在您的代码中被评估得比& 晚。
  • 你也许是对的。 MS 应更改为 (MS)。我会编辑回复,谢谢。
【解决方案2】:

0x0100 | 0x011 将导致0x111,这将导致所有& 测试0x1, 0x10, 0x100, 0x11, 0x110 and 0x111 评估true

您需要直接测试您的值,并且无法使用您的#define

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多