转换0到1和反Versa

jav*_*guy 16 language-agnostic programming-languages bit-manipulation

我在接受采访时被问到:如何将0转换为1,将1转换为0.我回答:

  1. 简单if而且switch
  2. 点翻转.

还有其他方法吗?

Sea*_*ean 38

简单算术:

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

实际上,有无数个多项式将映射1到0,反之亦然.例如:

x = x * x * x * x * x - x * x * x * x + x * x - 2 * x + 1;
Run Code Online (Sandbox Code Playgroud)


Jer*_*fin 30

一些明显的可能性:

!n
1-n
n^1
n==0
n!=1
n<1
Run Code Online (Sandbox Code Playgroud)

  • 其中,只有"1-n"和"n xor 1"在语义上是不可知的,因为它们处理整数值.所有其他人将整数与布尔结果混合在一起,使它们不适合强类型语言. (4认同)
  • `!n` 并不可靠地以与语言无关的方式 1 =&gt; 0, 0 =&gt; 1 (在某些语言中,!0 = -1);在Java中,它甚至不起作用(“运算符!不能应用于int”)。 (3认同)
  • @Totophil,^是大多数语言中的xor运算符. (3认同)
  • @Totophil:如果^是幂运算符,则0 ^ 0未定义(数学上,请参阅http://mathworld.wolfram.com/Power.html). (2认同)

Sea*_*ean 18

查找表:

int[] swap = { 1, 0 };
Run Code Online (Sandbox Code Playgroud)

然后:

x = swap[x];
Run Code Online (Sandbox Code Playgroud)

  • 这是一个非常棒的答案.我喜欢它,因为它的数学性能最差.与其他答案不同,如果域和范围超出0-1 ala,则会失败,尽管不是优雅的.+1 (2认同)

Pau*_*han 5

拿一个回形针.理顺它.这是一个1.弯曲以达到目的.它是一个0.为了使它成为1,将它拉直.

  • 我认为 Java 的功能还不够强大。 (2认同)