3

まず私の英語でごめんなさい。私が持っているとしましょう、

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

これで、5 には 2 つ (3 番目と 1 番目) の ON フラグがあると言えます。同様に、7 には 3 つ (1 番目、2 番目、3 番目) の ON フラグがあります。

ここで、入力 2 と flag1、flag2、..... flagn があるとします。flag2 のみがオンになっていることをプログラムで見つける必要があります。

4

4 に答える 4

5

バイナリ表現で既にわかるように、できません。3 は 3 または 2+1 のいずれかです。したがって、2 の累乗を使用します。

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
}
于 2012-05-04T11:29:06.507 に答える
3

これは、JavaScriptのビット演算子、&特に演算子で行うことができます。入力番号が次の場合、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 である各ビット位置に 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");
}
于 2012-05-04T11:34:11.183 に答える
1

フラグの位置 (0-indexed) で & 演算子を使用して、フラグがオンになっているかどうかを確認できます。

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

& を使用して 1 つのフラグのみがオンになっているかどうかを確認するには、次の形式の数値 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*/}
于 2012-05-04T11:34:30.503 に答える
0
num = 6
arr = new Array();
while(num!=0){
   arr.push(num%2);
   num = parseInt(num/2);
}
console.log(arr)

Arrにはビット1と0があり、そこからONを見つけることができます

于 2012-05-04T11:35:30.020 に答える