49

我有 3 个独立的布尔变量 , bit1&bit2bit3需要在 JavaScript 中计算十进制整数等价物吗?

4

9 回答 9

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

+!true //=> 0
+!false //=> 1
于 2013-11-07T17:11:38.430 回答
33

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

var intVal = bit1 ? 1 : 0;

如果您不熟悉三元运算符,它采用以下形式

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

来自评论中的 Sime Vidas,

var intVal = +bit1;

效果一样好,速度更快。

于 2012-09-10T19:58:25.943 回答
19
Number(true) // => 1
Number(false) // => 0
于 2016-02-26T16:02:23.500 回答
13

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

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

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

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

于 2012-09-10T20:01:11.847 回答
7

使用 ~~ :

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

sum = bit1 + bit2 + bit3;
于 2014-02-10T02:48:35.983 回答
3
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 }

选择!

于 2017-02-26T04:24:41.667 回答
1

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

var i = result ? 1 : 0;
于 2012-09-10T20:01:32.423 回答
0

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

如果您想要按位等效,基本上您想要使用位移位和 OR-summing 的组合,这很常见。在伪代码中:

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;
于 2012-09-10T20:05:00.920 回答
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));
于 2013-04-26T12:03:22.617 回答