У меня есть 3 отдельных булевых переменных, bit1
, bit2
и bit3
и мне нужно вычислить десятичный целочисленный эквивалент в JavaScript?
Логическое преобразование с целым числом
Ответ 1
+true //=> 1
+false //=> 0
+!true //=> 0
+!false //=> 1
Ответ 2
Тернарный оператор - быстрое однострочное решение:
var intVal = bit1 ? 1 : 0;
Если вы не знакомы с тернарным оператором, он принимает форму
<boolean> ? <result if true> : <result if false>
От Sime Vidas в комментариях,
var intVal = +bit1;
работает так же хорошо и быстрее.
Ответ 3
Если вы спрашиваете, как получить 3-битное целочисленное значение на основе бит1 (MSB), бит2 и бит3 (LSB), вы можете просто сделать следующее:
var intval = bit1 << 2 | bit2 << 1 | bit3;
Левые сдвиги (<<
) будут автоматически преобразовывать логические значения в соответствующие им значения int.
Живая демонстрация: http://jsfiddle.net/DkYqQ/
Ответ 4
Используйте ~~:
bit1 = ~~bit1; // bit1 = true will return 1 or bit1 = false rtuen 0
bit2 = ~~bit2;
bit3 = ~~bit3;
sum = bit1 + bit2 + bit3;
Ответ 5
Number(true) // => 1
Number(false) // => 0
Ответ 6
У вас есть возможность использовать тернарный оператор, он будет выглядеть примерно так:
var i = result ? 1 : 0;
Ответ 7
Ну, это может быть две вещи. Вам нужен побитовый десятичный эквивалент, как если бы вы смешали бит1, бит2 и бит3 вместе со смежными значительными битами? Или вам нужен вес для помех, где вы подсчитываете, сколько бит установлено?
Если вы хотите поразрядный эквивалент, в основном вы хотите использовать комбинацию бит-сдвига и 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;
Ответ 8
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));
Ответ 9
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 }
выберите