您好,我需要删除Java中的一个标志。我有以下常量:
public final static int OPTION_A = 0x0001;
public final static int OPTION_B = 0x0002;
public final static int OPTION_C = 0x0004;
public final static int OPTION_D = 0x0008;
public final static int OPTION_E = 0x0010;
public final static int DEFAULT_OPTIONS =
OPTION_A | OPTION_B | OPTION_C | OPTION_D | OPTION_E;
我想从默认选项中删除,例如OPTION_E。为什么下面的代码不正确?
// remove option E from defaul options:
int result = DEFATUL_OPTIONS;
result |= ~OPTION_E;
发布于 2011-09-29 18:06:40
你必须写
result &= ~OPTION_E;
更长的解释:
您必须以位为单位进行思考:
~OPTION_E // 0x0010 -> 0xFFEF
DEFATUL_OPTIONS // -> 0x001F
0xFFEF | 0x001F // -> 0xFFFF
0XFFEF & 0x001F // -> 0x000F
OR
永远不会清除1
位,它最多只能设置更多位。另一方面,AND
将清除位。
https://stackoverflow.com/questions/7595701
复制相似问题