ejemplo - function boolean javascript
Booleano para la conversión entera (9)
Tengo 3 variables booleanas separadas, bit1
, bit2
y bit3
y necesito calcular el entero decimal equivalente en JavaScript?
Bueno, esto podría ser dos cosas. ¿Desea el equivalente decimal bit a bit, como si hubiera comprimido bit1, bit2 y bit3 juntos en bits significativos adyacentes? ¿O quieres el peso Hamming, donde contar cuántos bits se establecen?
Si quieres el equivalente bit a bit, básicamente quieres usar una combinación de cambio de bit y suma OR, que es bastante común. En pseudocódigo:
var intResult = 0;
for each bit in {bit1, bit2, bit3}
{
int bitVal = 0;
if(bit) bitVal = 1;
intResult = (intResult << 1) | bitVal;
}
Si desea el peso Hamming, simplemente incremente el resultado para cada bit configurado:
var intResult = 0;
for each bit in {bit1, bit2, bit3}
if(bit) intResult++;
Si su idioma permite el uso de booleanos como valores enteros (verdadero = 1, falso = 0), estos se vuelven más fáciles:
//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;
El operador ternario es una solución rápida de una línea:
var intVal = bit1 ? 1 : 0;
Si no está familiarizado con el operador ternario, toma la forma
<boolean> ? <result if true> : <result if false>
De Sime Vidas en los comentarios,
var intVal = +bit1;
funciona igual de bien y es más rápido.
Si lo que está preguntando es cómo obtener el valor entero de 3 bits basado en bit1 (MSB), bit2 y bit3 (LSB), puede hacer lo siguiente:
var intval = bit1 << 2 | bit2 << 1 | bit3;
Los cambios a la izquierda ( <<
) convertirán automáticamente los booleanos a sus valores int correspondientes.
Demostración en vivo: http://jsfiddle.net/DkYqQ/
Use ~~:
bit1 = ~~bit1; // bit1 = true will return 1 or bit1 = false rtuen 0
bit2 = ~~bit2;
bit3 = ~~bit3;
sum = bit1 + bit2 + bit3;
Usted tiene la opción de usar un operador ternario. Se verá más o menos así:
var i = result ? 1 : 0;
+true //=> 1
+false //=> 0
+!true //=> 0
+!false //=> 1
Number(true) // => 1
Number(false) // => 0
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 }
¡escoger!
function boolsToInt(){
var s = "";
for(var i in arguments)s+=arguments[i]?1:0;
return parseInt(s,2);
}
la entrada puede representarse como bool o int:
console.log(boolsToInt(true,false,true,true));
console.log(boolsToInt(1,0,1,1));