2015-04-03 75 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)