【问题标题】:Java check if flags are set in integer [duplicate]Java检查标志是否以整数设置[重复]
【发布时间】:2018-11-09 13:11:39
【问题描述】:

我感觉这个问题的答案是位移,但我无法完全让我的大脑掌握它。

我读取了一些整数值,总是不同的,例如,我需要通过查看它们的位模式来检查是否设置了某些标志。

Flags:
0x00000002 = Do thing 
0x80000000 = Do another thing

Value: 0x80000002

所以查看值,应该设置两个标志。但我不确定实现这一点的最佳方法。我想我可以使用BigInteger.testBit();,但我真的不想弄清楚每个标志中的确切位(有很多)。

我记得很久以前在 C 中做过类似的事情,类似于 if (value & flag),但 Java 似乎不喜欢这样。

任何想法的建议,将不胜感激。

谢谢

【问题讨论】:

    标签: java binary hex bit-shift


    【解决方案1】:

    如果你想使用位,你可以使用 AND

    boolean isSet = (values & mask) == mask;
    

    但是对于非常非常小的性能影响(可能不足以引起注意),您可以使用 EnumSet 获得相同的基本原理

    boolean isSet = myEnumSet.contains(MyEnumReferencingTheOldIntegerValue)
    

    【讨论】:

    • 谢谢,我想这可以解决问题。我还将看看 EnumSet。
    【解决方案2】:

    可能最简单的解决方案如下:

    if ((value & 0x00000002) != 0)
        // Do thing
    if ((value & 0x80000000) != 0)
        // Do other thing
    

    您只需确保每个标志只使用一位。如果是,那就更复杂了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-09
      • 2015-12-29
      • 2021-07-14
      • 1970-01-01
      • 2018-03-25
      • 2017-05-03
      • 2012-08-27
      • 2010-11-23
      相关资源
      最近更新 更多