布尔到整数转换

时间:2012-09-10 19:56:28

标签: javascript boolean-expression

我有3个独立的布尔变量,bit1bit2& bit3我需要计算JavaScript中的十进制整数等值吗?

9 个答案:

答案 0 :(得分:72)

+true //=> 1
+false //=> 0

+!true //=> 0
+!false //=> 1

答案 1 :(得分:27)

三元运算符是一种快速的单行解决方案:

var intVal = bit1 ? 1 : 0;

如果您不熟悉三元运算符,则采用

形式
<boolean> ? <result if true> : <result if false>

来自Sime Vidas的评论,

var intVal = +bit1;

同样有效并且速度更快。

答案 2 :(得分:12)

如果您要问的是如何根据bit1(MSB),bit2和bit3(LSB)获取3位整数值,您可以执行以下操作:

var intval = bit1 << 2 | bit2 << 1 | bit3;

左移(<<)会自动将布尔值转换为相应的int值。

现场演示: http://jsfiddle.net/DkYqQ/

答案 3 :(得分:11)

Number(true) // => 1
Number(false) // => 0

答案 4 :(得分:5)

使用~~:

bit1 = ~~bit1; // bit1 = true will return 1 or bit1 = false rtuen 0
bit2 = ~~bit2;
bit3 = ~~bit3;

sum = bit1 + bit2 + bit3;

答案 5 :(得分:2)

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 }

选择!

答案 6 :(得分:1)

您可以选择使用三元运算符,它看起来像这样:

var i = result ? 1 : 0;

答案 7 :(得分:0)

嗯,这可能是两件事。你想要按位十进制等效,就像你在相邻的有效位中将bit1,bit2和bit3压缩在一起一样?或者你想要汉明重量,你在哪里计算设置了多少位?

如果你想要按位等效,基本上你想要使用位移和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 :(得分:0)

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