Преобразуйте от 0 до 1 и наоборот

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

  1. Простой if и switch
  2. Поразрядные операции.

Есть ли какой-либо другой подход?

16
задан Pops 6 May 2010 в 23:42
поделиться

9 ответов

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

!n
1-n
n^1
n==0
n!=1
n<1
30
ответ дан 30 November 2019 в 15:02
поделиться

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

x = 1 - x;

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

x = x * x * x * x * x - x * x * x * x + x * x - 2 * x + 1;
38
ответ дан 30 November 2019 в 15:02
поделиться

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

5
ответ дан 30 November 2019 в 15:02
поделиться

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

0
ответ дан 30 November 2019 в 15:02
поделиться

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

pow(0, n);
1
ответ дан 30 November 2019 в 15:02
поделиться

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

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

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);
    }
}
-1
ответ дан 30 November 2019 в 15:02
поделиться

Some Trig : COS (PI * N) ^ 2

В python

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

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

(3 + n) % 2
3
ответ дан 30 November 2019 в 15:02
поделиться

Lookup table:

int[] swap = { 1, 0 };

And later:

x = swap[x];
18
ответ дан 30 November 2019 в 15:02
поделиться

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

3
ответ дан 30 November 2019 в 15:02
поделиться