2010-03-09 38 views
30

什么是最优雅的方式做下的东西:最优雅的方式来改变0到1,反之亦然

int i = oneOrZero; 

if (i == 0) { 
    i = 1; 
} else { 
    i = 0; 
} 

你可以假设i只能有1或0值。

+1

这是一个orrero业务被用来做什么?我看到你让程序员断言我只有1或0,但这不是编译器强制执行的。为什么不使用布尔值或枚举? – Carl 2010-03-09 17:44:24

+0

@Carl:因为它是整数 – Roman 2010-03-09 18:19:54

+1

让我澄清一下:为什么你使用一个int来表示(1)只有两个值的东西(不是由整数类型强制执行的)和(2)其值已翻转的东西? – Carl 2010-03-09 18:24:55

回答

88

i ^= 1;

XOR与1(你需要翻转0 <--> 1无论哪种方式的情况下)的值这给你两种方式:

0^1 = 1 
1^1 = 0 
+2

这不仅更短,而且对于我来说,它的含义比减法答案好一点。 – 2010-03-09 17:29:44

+1

这也适用于Python – Gourneau 2013-02-05 20:22:44

64

减法?

i = 1 - i; 
+0

不错。我考虑过二元运算,并没有寻找更简单的解决方案。 – Roman 2010-03-09 17:25:06

+0

等等......来自一位数学家;) – AraK 2010-03-09 17:25:40

+1

真正的问题是,你会添加一条评论:“翻转我的价值”还是让它独自一人? – 2010-03-09 17:28:47

2

i = (i == 0)?1:0是单向的,虽然我喜欢@ Jimmy和@ Yuval的版本更好。

+1

我更喜欢这个,因为当我读代码时,我确切地知道它应该做什么。这种减法太聪明了,异或并不常见于我马上要识别的操作。 – 2010-03-09 17:33:41

+0

@Frank Schwieterman:根据我的经验,运营商也不那么常见。如果你从未见过?运营商,这并不明显。我会去与异或(也许评论它)。 – GreenMatt 2010-03-09 17:49:14

+0

嗯好点。从我的角度来看,我将认识到? ^之前,但我想那不是普遍的。 – 2010-03-09 18:12:42

2

使用XOR位

i ^= 1;

4

i = (i + 1) % 2,但我认为我们都同意减法或者XOR方法是更好! (虽然它具有“翻转开关”的额外好处,但不止二元)

1
int x = 0; 
x=(int)Math.cos(x); 
System.out.println("X value "+x);