2015-04-03 76 views

回答

2

可以使用bitwise AND operator (&),像这样:

if ((flag & 0x08) == 0x08) { 
    // They have it 
} 

(0x08的十六进制= 1000二进制= 8小数。)

&取操作数和还给仅包含所设置的位的值在操作数的均为(将操作数转换为标准2的补码32位整数后)。因此0x0C & 0x080x08,因为0x08位设置在两个操作数中,但(比如说)0x07 & 0x080x00,因为其中一个操作数没有设置位

如果你检查你知道值只包含一个位(如0x08),你实际上并不需要== 0x08的一部分,这是好的:

if (flag & 0x08) { 
    // They have it 
} 

如果您曾戴过口罩,则需要检查多个位,例如0x0A,则需要==,否则结果将是0x080x02以及0x0A。所以使用(thingToTest & flagToTestFor) == flagToTestFor这样的模式是一个很好的习惯。

你不必使用十六进制,但是在使用位时我发现它很方便(因为JavaScript没有文字二进制表示法)。或者你可以考虑一些“常数”(这真的可以在ES6常量,但现在我们将与ES5棒),你在声明你的代码的开头:

var CREATE_FLAG = parseInt("1000", 2); 
var READ_FLAG = parseInt("0100", 2); 
var UPDATE_FLAG = parseInt("0010", 2); 
var DELETE_FLAG = parseInt("0001", 2); 

...然后你可以做if ((flag & CREATE_FLAG) == CREATE_FLAG)