有没有更好的方法来写v = (v == 0 ? 1 : 0);[已关闭]

2022-08-29 23:10:23

我想在0和1之间切换一个变量。如果它是0,我想把它设置为1,否则如果它是1,我想把它设置为0。

这是一个非常基本的操作,我经常写,我想研究最短,最清晰的方法来做到这一点。这是我迄今为止最好的:

v = (v == 0 ? 1 : 0);

你能在这方面有所改进吗?

编辑:问题是问如何在保持清晰度的同时用最少的字符编写上述陈述 - 这怎么“不是一个真正的问题”?这并不是一个代码高尔夫练习,尽管人们已经把它当作高尔夫来了一些有趣的答案 - 很高兴看到高尔夫以建设性和发人深省的方式使用。


答案 1

您只需使用:

v = 1 - v;

这当然假设变量已正确初始化,即它只有值0或1。

另一种更短但使用不太常见的运算符的方法:

v ^= 1;

编辑:

要清楚;我从来没有把这个问题当作代码高尔夫来处理,只是为了找到一种简短的方法来完成任务,而不使用任何模糊的技巧,如操作员的副作用。


答案 2

因为 是一个值,也是一个值。0false1true

v = (v ? 0 : 1);

如果您愿意使用和代替数字truefalse

v = !v;

或者如果它们必须是数字:

v = +!v; /* Boolean invert v then cast back to a Number */