Преобразование 0 к 1 и наоборот

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

  • Простые if и switch
  • Бит переворачивается.

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

Ответ 1

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

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

Ответ 2

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

x = 1 - x;

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

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

Ответ 3

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

int[] swap = { 1, 0 };

И позже:

x = swap[x];

Ответ 4

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

Ответ 5

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

Ответ 6

Some Trig: COS (PI * N) ^ 2

В python

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

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

(3 + n) % 2

Ответ 7

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

pow(0, n);

Ответ 8

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

Ответ 9

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

Ответ 10

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

(EDIT: глядя на другие ответы, я, возможно, неправильно понял вопрос... но мне все еще нравится мой ответ: -)

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);
    }
}