2012-05-04 34 views
1

首先对不起,我的英语。假设我有,检查哪些标志是整数的开/关?

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

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

现在,假设我有一个输入2和flag1,flag2,..... flagn。我需要在程序中发现只有flag2是ON。

+0

并且希望这在一个combinatoin的C#,JavaScript和jQuery的?你可以添加正确的标签,或解释这些语言与它有什么关系? – Nanne

+0

@Nanne,Javscrip ot Jqery。 – user960567

+0

然后向我们显示您的代码。你有一些javascript hwere你有这个数字?二进制? – Nanne

回答

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 
} 
+0

你能告诉我如何做到这一点在javscript。 – user960567

+0

@ user960567请参阅编辑 – CodeCaster

+0

很好,谢谢。 – user960567

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 

该运营商的行为描述如下:

位与

返回一个两个操作数的相应位为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"); 
} 
+0

谢谢。但我需要找到标志。 – user960567

+0

@ user960567:查看修订后的答案。 –

+0

谢谢。萨尔曼.. – user960567

1

可以检查一个标志是使用&操作者与该标志的位置(0-索引)

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

您可以检查是否只有一个标志使用&与此数量形式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*/} 
+0

谢谢,但我认为@CodeCaster的答案更准确,更易于理解。 – user960567

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

编曲将具有位1 & 0,从中可以找到ON