最优雅的方式是将0改为1,反之亦然

Rom*_*man 52 java algorithm

做下一件事最优雅的方法是什么:

int i = oneOrZero;

if (i == 0) {
   i = 1;
} else {
   i = 0;
}
Run Code Online (Sandbox Code Playgroud)

您可以假设i只能有1或0的值.

Yuv*_*dam 123

i ^= 1;

将值与1进行异或.这为您提供了两种方式(如果您需要翻转0 <--> 1任何一种方式):

0 ^ 1 = 1
1 ^ 1 = 0
Run Code Online (Sandbox Code Playgroud)

  • 这不仅更短,而且对我的意义比减法答案好一点. (2认同)

Jim*_*mmy 85

减法?

i = 1 - i;
Run Code Online (Sandbox Code Playgroud)

  • @yar:我个人觉得XOR在"翻转值"意义上更有意义,所以我可能会评论一个减法.但是,有些人在看到按位运算符时会莫名其妙地担心,所以你可能不得不以任何方式发表评论. (6认同)
  • 真正的问题是,你会添加一条评论说“翻转 i 的值”还是就不管它? (2认同)

Lar*_*rry 6

i = ( i + 1 ) % 2虽然我认为我们都同意减法或xor方法更好!(虽然它具有"翻转开关"的额外好处,而不仅仅是二进制.)


Chi*_*chi 5

i = (i == 0)?1:0 是一种方法,尽管我更喜欢@Jimmy和@Yuval的版本。


doc*_*doc 5

使用按位异或运算符:

i ^= 1;
Run Code Online (Sandbox Code Playgroud)