Подтвердить что ты не робот

Логическое преобразование с целым числом

У меня есть 3 отдельных булевых переменных, bit1, bit2 и bit3 и мне нужно вычислить десятичный целочисленный эквивалент в JavaScript?

4b9b3361

Ответ 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 }

выберите