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

这是一个非常基本的运算,我经常写,我想研究一下最短,最清晰的方法。这是我目前为止最好的:

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

你能改进一下吗?

编辑:这个问题问的是如何在保持清晰的情况下用最少的字符写出上面的语句——为什么这“不是一个真正的问题”?这并不是一个代码-高尔夫练习,尽管一些有趣的答案来自于把它当作高尔夫的人——很高兴看到高尔夫以一种建设性和发人深省的方式被使用。


当前回答

如果只有两个值,如本例中的(0,1),我认为使用int是浪费的。宁愿用布尔值,用比特来计算。我知道我在假设,但在两种状态之间切换布尔似乎是理想的选择。

其他回答

如果你保证你的输入是1或0,那么你可以使用:

v = 2+~v;
v = v == 0 ? 1 : 0;

够了!

你可以为它写一个函数,并像这样使用它:

v = inv(v)

另一种创造性的方法是,v等于任何值,总是返回0或1

v = !!v^1;

另一种说法是:

v = ~(v|-v) >>> 31;