3つの別々のブール変数、、bit1
&bit2
がbit3
あり、JavaScriptで同等の10進整数を計算する必要がありますか?
9 に答える
三項演算子は、簡単な 1 行のソリューションです。
var intVal = bit1 ? 1 : 0;
三項演算子に慣れていない場合は、次の形式を取ります
<boolean> ? <result if true> : <result if false>
コメントのSime Vidasから、
var intVal = +bit1;
同様に機能し、より高速です。
ビット1(MSB)、ビット2、およびビット3(LSB)に基づいて3ビット整数値を取得する方法を求めている場合は、次のようにすることができます。
var intval = bit1 << 2 | bit2 << 1 | bit3;
左シフト(<<
)は、ブール値を対応するint値に自動的に変換します。
ライブデモ: http: //jsfiddle.net/DkYqQ/
三項演算子を使用するオプションがあります。次のようになります。
var i = result ? 1 : 0;
さて、これは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;
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));