检查哪些标志是整数的开/关?

时间:2012-05-04 11:26:57

标签: javascript jquery

首先抱歉我的英语。我想说,我有,

0 // 0
1 // 1
2 // 10
3 // 11
4 // 100
5 // 101
6 // 110
7......................

现在,我可以说5有两个(第3和第1)ON标志。同样,7有三个(第1,第2和第3)ON标志,依此类推。

现在,假设我有一个输入2和flag1,flag2,..... flagn。我需要以编程方式查找只有flag2为ON。

4 个答案:

答案 0 :(得分:3)

你不能,正如你已经可以在二进制表示中看到的那样。 A 3可以是3或2 + 1。所以使用两个权力:

0 // 0000
1 // 0001
2 // 0010
4 // 0100
8 // 1000

然后在检查5 (0101)的值时,您将看到设置了1和4的位,因此您知道启用了哪些标志。

我不知道确切的JavaScript语法,但是这样的事情会:

FLAG_1 = 1
FLAG_2 = 2
FLAG_3 = 4
FLAG_4 = 8
FLAG_5 = 16

var foo = FLAG_2 | FLAG_5; // Use binary OR (|) to add flags

if (foo & FLAG_5)
{
    // Do something that has to be done when FLAG_5 is set
}

答案 1 :(得分:3)

可以使用JavaScript bitwise operators,特别是&运算符来完成此操作。如果输入的数字是2,那么您可以检查设置了哪些标志:

console.log(2 & 1); // 1 = 00000001b, result = 0
console.log(2 & 2); // 2 = 00000010b, result = 2, bingo!
console.log(2 & 4); // 4 = 00000100b, result = 0
console.log(2 & 8); // 8 = 00001000b, result = 0

此运算符的行为描述如下:

  

按位AND

     

在每个位的位置返回一个   两个操作数的相应位是1。

修改

以上示例可以像这样循环编写:

var input = 7;
for(var bit = 0; bit < 8; bit++) {
    var mask = Math.pow(2, bit);
    console.log("bit #" + bit + " is", (input & mask) == mask ? "set" : "clear");
}

答案 2 :(得分:1)

您可以使用&amp ;;检查标志是否已开启具有标志位置的运算符(0索引)

if (num & (1 << flagPosition)) { /*flag is on */}
else { /*flag is off */} 

您可以检查是否只有一个标志正在使用&amp;这个形式的数量为2 ^ N - 1(其中N是最大标志数+ 1)

var N = (1 << 31) - 1;
if (N & num == 1 << flagPosition)  {/* only flagPosition is ON*/}
else { /*flagPosition is OFF or there are other ON flags*/}

答案 3 :(得分:0)

num = 6
arr = new Array();
while(num!=0){
   arr.push(num%2);
   num = parseInt(num/2);
}
console.log(arr)

Arr将拥有1位和1位。 0,你可以从中找到ON