检查标记位 java

2022-08-31 20:00:55

我有一个标志位的问题。我有一个变量来保存标志。首先,我为该变量设置了一些标志。稍后,我需要检查该变量中设置了多少个标志。但我不知道该怎么做。int


答案 1

要检查是否设置了位值,请执行以下操作:

int value = VALUE_TO_CHECK | OTHER_VALUE_TO_CHECK;

if ((value & VALUE_TO_CHECK) == VALUE_TO_CHECK)
{
    // do something--it was set
}

if ((value & OTHER_VALUE_TO_CHECK) == OTHER_VALUE_TO_CHECK)
{
    // also set (if it gets in here, then it was defined in 
    //   value, but it does not guarantee that it was set with
    //   OR without other values. To guarantee it's only this
    //   value just use == without bitwise logic)
}

请务必注意,不应将选中的值设置为 0,除非它表示“全部”或“无”(并且不要使用按位逻辑进行比较;只需使用 ),因为 any 始终为 0。value == 0value & 0


答案 2

此外,请考虑使用枚举集而不是位字段。另见布洛赫,项目32

附录:作为一个具体的例子

枚举集还为传统的位标志提供了丰富的类型安全替代:

EnumSet.of(Style.BOLD, Style.ITALIC);

特别注意从 和 继承的方便方法。AbstractSetAbstractCollection


推荐