布尔到整数的转换

Posted

技术标签:

【中文标题】布尔到整数的转换【英文标题】:Boolean to integer conversion 【发布时间】:2012-09-03 17:23:53 【问题描述】:

我有 3 个独立的布尔变量 bit1bit2bit3,我需要在 javascript 中计算等效的十进制整数?

【问题讨论】:

您是否希望将每个转换为数字或组合转换为相当于 3 位的集合,即 bit3 表示 4? Convert boolean result into number/integer的可能重复 可能重复:***.com/questions/7820683/… 【参考方案1】:
+true //=> 1
+false //=> 0

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

【讨论】:

我喜欢简洁的答案,但如果您能简短解释一下,我将不胜感激 这里是示例和说明文档的链接:developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… @Doug 感谢@parsonsbots 应该解释一半。剩下的就是:developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… 这是一个糟糕的解决方案。试试 +undefined @Jiraff537 - undefined 不是布尔值。【参考方案2】:

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

var intVal = bit1 ? 1 : 0;

如果你不熟悉三元运算符,它的形式是

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

来自 cmets 的 Sime Vidas,

var intVal = +bit1;

效果一样好,速度更快。

【讨论】:

var intVal = bit1 不就行了吗?布尔值毕竟是 1 或 0,因此会自动分配 1 或 0。 @Cupidvogel 赋值时不存在隐式转换,JavaScript 有单独的布尔类型(试试typeof true,参考Boolean)。那么这将如何解决问题呢? 数字转换可以使用+ 一元运算符:var intVal = +bit1;。这里不需要三元。 不知道,只需执行a = 5 &gt; 44; alert(a+456.5); 之类的操作,您就会看到456.5。将44改为4,你会看到457.5 @Cupidvogel,唯一的问题是如果您不对布尔值进行任何数字运算,它将不会转换为数字类型。【参考方案3】:
Number(true) // => 1
Number(false) // => 0

【讨论】:

【参考方案4】:

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

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

左移 (&lt;&lt;) 会自动将布尔值转换为其对应的 int 值。

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

【讨论】:

终于用到了 shift &gt;&gt; 运算符 ;) 呃,我希望 bit3 被移动 2,bit2 被移动 1,bit1 不被移动...... Lucero,我在回答中提到我假设 bit1 是 MSB。它可以去任何一种方式。【参考方案5】:

使用~~:

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

sum = bit1 + bit2 + bit3;

【讨论】:

【参考方案6】:
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 

选择!

【讨论】:

你能解释一下你在这里做了什么吗? 1. 模拟:if (bool == true) return 1 else return 0 2,3,4. 在按位运算之前自动将布尔值转换为整数2. b> 按位或:true | 0 => 1; false | 0 => 0 3. 按位和:true &amp;1 => 1; false &amp; 1 => 0 4. 按位非,双反转:~true => -2; ~ -2 => 1; ~false => -1; ~ -1 => 0; 5. 模拟null + truenull + false,其中自动将布尔值引向整数,将空值引向0;如果按原样使用函数并且 bool === 未定义函数 1-4 返回 0;函数 5 返回 NaN; function boolToInt(bool) return +bool // 如果 bool = undefined 上面的评论 - "...bool === 未定义的函数 1-4 返回 0;函数 5 返回 NaN"【参考方案7】:

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

var i = result ? 1 : 0;

【讨论】:

也可以使用,int myInt = (bit1)?1:0 ; 不,您不能使用 int 代替 var,虽然您可以省略空格,但您不应该这样做,它不符合不同的方法。【参考方案8】:

嗯,这可能是两件事。您是否想要按位十进制等效,就好像您在相邻的有效位中将 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++;

如果您的语言允许将布尔值用作整数值(真 = 1,假 = 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;

【讨论】:

【参考方案9】:
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));

【讨论】:

以上是关于布尔到整数的转换的主要内容,如果未能解决你的问题,请参考以下文章

将4位整数转换为布尔列表

系统学Python整数浮点数布尔值及类型转换

将 32 个布尔值的集合转换为 32 位整数 [重复]

将 DataFrame 中的新派生列从布尔值转换为整数

Knex.js 和 MySQL:将整数转换为布尔值以进行批量选择

Java基本数据类型与类型转换