Конвертировать 0 в 1 и наоборот - PullRequest
14 голосов
/ 07 мая 2010

Меня спросили в интервью: как преобразовать 0 в 1 и 1 в 0. Я ответил:

  1. Простой if и switch
  2. Битовое переключение.

Есть ли другой подход?

Ответы [ 10 ]

34 голосов
/ 07 мая 2010

Простая арифметика:

x = 1 - x;

На самом деле существует бесконечное число полиномов, которые будут отображать 1 в 0 и наоборот. Например:

x = x * x * x * x * x - x * x * x * x + x * x - 2 * x + 1;
29 голосов
/ 07 мая 2010

Несколько очевидных возможностей:

!n
1-n
n^1
n==0
n!=1
n<1
18 голосов
/ 07 мая 2010

Таблица поиска:

int[] swap = { 1, 0 };

и позже:

x = swap[x];
5 голосов
/ 07 мая 2010

Возьмите скрепку. Выправить это. Это 1. Согните это, чтобы встретить его концы. Это 0. Чтобы сделать это 1, выпрямите его.

3 голосов
/ 07 мая 2010

Некоторые триггеры: COS (PI * N) ^ 2

В питоне

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

Я не могу поверить, что люди забыли модуль:

(3 + n) % 2
3 голосов
/ 07 мая 2010

они, вероятно, ожидали, что вы будете использовать поразрядно НЕ

1 голос
/ 07 мая 2010

Этот не самый лучший, но он работает:

pow(0, n);
0 голосов
/ 24 июля 2014

Я использовал -~-n в JavaScript. Он преобразует 1 в -1, который представлен как 11111111, затем переворачивает биты в 00000000, что равно 0. Второй отрицательный знак не влияет на 0. С другой стороны, если n равно 0, первый отрицательный знак не действует, тильда переворачивает биты, а второй отрицательный знак преобразует -1 в 1.

0 голосов
/ 07 мая 2010

Это должно работать для любых двух чисел ...

(РЕДАКТИРОВАТЬ: глядя на другие ответы, я мог неправильно прочитать вопрос ... но мне все еще нравится мой ответ: -)

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);
    }
}
0 голосов
/ 07 мая 2010

Я думаю, вы могли бы сделать ABS (VAR - 1), но я думаю, что ваши подходы более элегантные

...