У меня есть 3 отдельные логические переменные, bit1
, bit2
и bit3
, и мне нужно вычислить эквивалент десятичного целого числа в JavaScript?
Преобразование логического значения в целое число
Ответы (8)
Тернарный оператор — это быстрое однострочное решение:
var intVal = bit1 ? 1 : 0;
Если вы не знакомы с тернарным оператором, он принимает вид
<boolean> ? <result if true> : <result if false>
От Симе Видас в комментариях,
var intVal = +bit1;
работает так же хорошо и быстрее.
var intVal = bit1
? В конце концов, логическое значение — это либо 1, либо 0, поэтому оно автоматически присваивает 1 или 0.
- person SexyBeast; 11.09.2012
typeof true
и обратитесь к Boolean
). Итак, как это поможет?
- person ; 11.09.2012
+
: var intVal = +bit1;
. Тернар здесь не нужен.
- person Šime Vidas; 11.09.2012
a = 5 > 44; alert(a+456.5);
, вы увидите 456.5
. Измените 44 на 4, вы увидите 457.5
.
- person SexyBeast; 11.09.2012
typeof true
, это просто говорит вам, что тип true
является логическим, что показывает, что логические значения отделены от чисел.
- person ; 11.09.2012
<boolean> ? <result if true> : <result if false>
. У вас перепутаны операторы.
- person Alex Vulaj; 11.08.2015
boolean
функции, которая записывает значение в базу данных. Но БД — это MySQL, поэтому boolean
нужно преобразовать в tinyint
. Используя ваш ответ, я теперь могу сделать это максимально коротким и ненавязчивым, как это (обычное условие if вызывает ошибку): writeToDb($("#checkbox").prop("checked")?1:0); //call to function
- person myfunkyside; 24.05.2016
Если вы спрашиваете, как получить 3-битное целочисленное значение на основе бит1 (MSB), бит2 и бит3 (LSB), вы можете просто сделать следующее:
var intval = bit1 << 2 | bit2 << 1 | bit3;
Сдвиги влево (<<
) автоматически преобразуют логические значения в соответствующие значения int.
Текущая демонстрация: http://jsfiddle.net/DkYqQ/
>>
;)
- person Evandro Silva; 11.09.2012
bit3
будет смещено на 2, bit2
будет смещено на 1, а bit1
не будет сдвинуто...
- person Lucero; 11.09.2012
bit1
является MSB. Это могло пойти в любом случае.
- person Ethan Brown; 11.09.2012
Используйте ~~ :
bit1 = ~~bit1; // bit1 = true will return 1 or bit1 = false rtuen 0
bit2 = ~~bit2;
bit3 = ~~bit3;
sum = bit1 + bit2 + bit3;
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 }
выберите!
if (bool == true) { return 1 } else { return 0 }
2,3,4. автоматически приводит логическое значение к целому перед побитовыми операциями 2. побитовое или: true | 0
=› 1; false | 0
=> 0 3. поразрядно и: true &1
=> 1; false & 1
=› 0 4. побитовое нет, дважды инвертировано: ~true
=› -2; ~ -2
=> 1; ~false
=› -1; ~ -1
=› 0; 5. аналог null + true
, null + false
, где автоматически приводит логическое значение к целому, а нуль к 0; если использовать функцию как есть и bool === undefined functions 1-4 return 0; функция 5 возвращает NaN;
- person MypKOT-1992; 26.02.2017
У вас есть возможность использовать тернарный оператор. Это будет выглядеть примерно так:
var i = result ? 1 : 0;
int
вместо var
, и хотя вы можете опустить пробел, вы не должны этого делать, и это не считается другим подходом.
- person ; 11.09.2012
Ну, это может быть две вещи. Вам нужен побитовый десятичный эквивалент, как если бы вы сжали бит 1, бит 2 и бит 3 вместе в соседних значащих битах? Или вам нужен вес Хэмминга, где вы считаете, сколько битов установлено?
Если вам нужен побитовый эквивалент, в основном вы хотите использовать комбинацию побитового сдвига и суммирования по ИЛИ, что довольно распространено. В псевдокоде:
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));