转换0到1和反Versa

时间:2010-05-06 22:37:31

标签: language-agnostic programming-languages bit-manipulation

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

  1. 简单ifswitch
  2. 点翻。
  3. 还有其他办法吗?

10 个答案:

答案 0 :(得分:34)

简单算术:

x = 1 - x;

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

x = x * x * x * x * x - x * x * x * x + x * x - 2 * x + 1;

答案 1 :(得分:28)

一些显而易见的可能性:

!n
1-n
n^1
n==0
n!=1
n<1

答案 2 :(得分:18)

查找表:

int[] swap = { 1, 0 };

后来:

x = swap[x];

答案 3 :(得分:5)

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

答案 4 :(得分:3)

他们可能希望你使用按位NOT

答案 5 :(得分:3)

一些Trig: COS(PI * N)^ 2

在python中

import math
math.cos(math.pi * n)  ** 2

我无法相信人们忘记模数:

(3 + n) % 2

答案 6 :(得分:1)

这个不是最好的,但它有效:

pow(0, n);

答案 7 :(得分:0)

我猜你可以做ABS(VAR - 1),但我认为你的方法更优雅

答案 8 :(得分:0)

我在JavaScript中使用了-~-n。 它将1转换为-1,表示为11111111,然后将位翻转为00000000,即0。第二个负号不会影响0.另一方面,如果{{1} }为0,第一个负号无效,波形符号翻转位,第二个负号将-1转换为1.

答案 9 :(得分:-1)

这适用于任何两个数字......

(编辑:看看其他答案我可能误解了这个问题......但我仍然喜欢我的答案: - )

public class X
{
    public static void main(final String[] argv)
    {
        int x = Integer.parseInt(argv[0]);
        int y = Integer.parseInt(argv[1]);

        x += y;
        y = x - y;
        x = x - y;

        System.out.println(x);
        System.out.println(y);
    }
}