web-dev-qa-db-ja.com

ブールから整数への変換

3つの個別のブール変数、bit1bit2bit3とJavaScriptで同等の10進整数を計算する必要がありますか?

43
user1661099
+true //=> 1
+false //=> 0

+!true //=> 0
+!false //=> 1
76
yckart

三項演算子は、簡単な1行のソリューションです。

var intVal = bit1 ? 1 : 0;

三項演算子に慣れていない場合は、次の形式を取ります。

<boolean> ? <result if true> : <result if false>

コメントのSime Vidasから、

var intVal = +bit1;

同様に動作し、高速です。

29
Samuel

求めているのが、bit1(MSB)、bit2、およびbit3(LSB)に基づいた3ビット整数値を取得する方法である場合、次のようにできます。

var intval = bit1 << 2 | bit2 << 1 | bit3;

左シフト(<<)は、ブール値を対応するint値に自動的に変換します。

ライブデモ:http://jsfiddle.net/DkYqQ/

13
Ethan Brown
Number(true) // => 1
Number(false) // => 0
11
Tim

~~を使用:

bit1 = ~~bit1; // bit1 = true will return 1 or bit1 = false rtuen 0
bit2 = ~~bit2;
bit3 = ~~bit3;

sum = bit1 + bit2 + bit3;
6
Otman Bouchari
function boolToInt(bool){ return bool ? 1 : 0 }
function boolToInt(bool){ return bool | 0 }
function boolToInt(bool){ return bool & 1 }
function boolToInt(bool){ return ~~bool }
function boolToInt(bool){ return +bool }

選択してください!

3
MypKOT-1992

三項演算子を使用するオプションがあります。次のようになります。

var i = result ? 1 : 0;
1
C_sharp

まあ、これは2つのことかもしれません。隣接する有効ビットでbit1、bit2、bit3を一緒に押しつぶしたようなビット単位の10進数を必要としますか?または、設定されているビット数をカウントするハミングの重みが必要ですか?

ビット単位の等価物が必要な場合は、基本的にビットシフトとOR加算の組み合わせを使用します。これは非常に一般的です。擬似コードで:

var intResult = 0;
for each bit in {bit1, bit2, bit3}
{
   int bitVal = 0;
   if(bit) bitVal = 1;
   intResult = (intResult << 1) | bitVal;
}

ハミングの重みが必要な場合は、設定されている各ビットの結果を単純にインクリメントします。

var intResult = 0;
for each bit in {bit1, bit2, bit3}
   if(bit) intResult++;

言語で整数値としてブール値の使用が許可されている場合(true = 1、false = 0)、これらはより簡単になります。

//bit-concatenation
var intResult = 0;
for each bit in {bit1, bit2, bit3}
   intResult = (intResult << 1) | bit;

//hamming weight
var intResult = 0;
for each bit in {bit1, bit2, bit3}
   intResult += bit;
0
KeithS
function boolsToInt(){
  var s = "";
  for(var i in arguments)s+=arguments[i]?1:0;
  return parseInt(s,2);
}

入力はboolまたはintとして表現できます。

console.log(boolsToInt(true,false,true,true));
console.log(boolsToInt(1,0,1,1));
0
user669677