que ejemplo convert javascript boolean-expression

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));