只使用数学运算将一个值从0变为1或者从1变为0的方法是什么?

9
我有一个在JavaScript中初始化为0的变量。我想要做的是:

  • 如果该值为0,则将其更改为1;
  • 如果该值为1,则将其更改为0;

并且我想避免使用条件语句(例如if/else)来检查该值。

我认为可以通过一些数学运算实现;我考虑过NOT操作,但我不知道如何在没有条件语句的情况下执行该操作。


你为什么想要避免使用if/else语句?有什么原因吗? - Joachim Sauer
没有特定的原因。只是我认为有一种更快速地将值从0->1或1->0更改的方法,而不需要先检查再设置该值... - markzzz
可能重复的问题 https://dev59.com/HnI-5IYBdhLWcg3wlpeW - tipycalFlow
@Joachim Sauer:您的解决方案看起来很棒。您不认为应用SUM(1-x)比检查变量,然后编辑值更快吗? - markzzz
好的!;) 实际上,我需要处理长度为4的数组,这样代码执行的时间无论如何都会很短。我需要这个解决方案来快速实现代码,并且根据您的直觉,改变这些值对我来说是一种好方法 :) 谢谢您 - markzzz
显示剩余2条评论
6个回答

42
x = 1-x;

8

简短的XOR语法:

x ^= 1

将0变成1,将1变成0。


x ^= 0 返回 0。 - mirik
@mirik,它总是x ^= 1 - x在0和1之间切换。 - SammieFox

4
您可以使用异或运算符:
x = x XOR 1;

1
请注意,语法将使用“^”,而不是“XOR”。因此,“x = x ^ 1;” - chris

2

这里有另一种表示法,它将true和false改为1和0。

x = +x;

如果您想要切换数值,则需要进行以下操作。
x = +!x;

2
如果变量是i,
i = 1 - i,应该可以解决问题。
如果i = 0,则1-0 = 1,那么i = 1;
如果i = 1,则1-1 = 0,那么i = 0。

0
let flip = (...array)=> {

  let res = []

for(let each of array){
 res.push([1,0][each])
 }

console.log(res)
 }

flip(0,1,1,1,0,0,1)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接