Меня спросили в интервью: как конвертировать 0 в 1 и 1 в 0. Я ответил:
- Простые
if
иswitch
- Бит переворачивается.
Есть ли другой подход?
Меня спросили в интервью: как конвертировать 0 в 1 и 1 в 0. Я ответил:
if
и switch
Есть ли другой подход?
Несколько очевидных возможностей:
!n
1-n
n^1
n==0
n!=1
n<1
Простая арифметика:
x = 1 - x;
На самом деле существует бесконечное число полиномов, которые будут отображать 1 в 0 и наоборот. Например:
x = x * x * x * x * x - x * x * x * x + x * x - 2 * x + 1;
Таблица поиска:
int[] swap = { 1, 0 };
И позже:
x = swap[x];
Возьмите скрепку. Выпрямите его. Это 1. Согните его, чтобы соответствовать его концам. Это 0. Чтобы сделать его 1, выпрямите его.
они, вероятно, ожидали, что вы будете использовать побитовое NOT
Some Trig: COS (PI * N) ^ 2
В python
import math
math.cos(math.pi * n) ** 2
Я не могу поверить, что люди забыли модуль:
(3 + n) % 2
Этот не самый лучший, но он работает:
pow(0, n);
Я думаю, вы могли бы сделать ABS (VAR - 1), но я думаю, что ваши подходы более элегантные
Я использовал -~-n
в JavaScript.
Он преобразует 1 в -1, который представлен как 11111111
, затем переворачивает биты в 00000000
, который равен 0. Второй отрицательный знак не влияет на 0. С другой стороны, если n
равно 0, первый отрицательный знак не влияет, тильда переворачивает биты, а второй отрицательный знак преобразует -1 в 1.
Это должно работать для любых двух чисел...
(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);
}
}