Можете ли вы использовать арифметические операторы для переключения между 0 и 1 - PullRequest
55 голосов
/ 03 ноября 2010

Есть ли способ без использования логических и побитовых операторов, только арифметических операторов, переключаться между целыми числами со значениями 0 и 1?

т. "variable? = variable" сделает переменную a 1, если она равна 0, или 0, если она равна единице

Ответы [ 9 ]

175 голосов
/ 03 ноября 2010
x = 1 - x

Переключение между 0 и 1.

26 голосов
/ 03 ноября 2010

Редактировать: Я неправильно понял вопрос, подумал, что ОП может использовать any оператор

Еще немного ... (игнорировать их)

x ^= 1       // bitwise operator
x = !x       // logical operator
x = (x <= 0) // kinda the same as x != 1

Без использования оператора?

int arr[] = {1,0}
x = arr[x]
18 голосов
/ 03 ноября 2010

Предполагается, что оно инициализируется как 0 или 1:

x = 1 - x
16 голосов
/ 03 ноября 2010

Еще один способ:

x = (x + 1) % 2
5 голосов
/ 04 ноября 2010

Вариация комедии по второму методу st0le

x = "\1"[x]
4 голосов
/ 31 марта 2017

Еще один способ немного перевернуть.

x = ABS(x - 1) // the absolute of (x - 1)
4 голосов
/ 21 января 2016

Вы можете просто попробовать это

+(!0) // output:1

+(!1) // output:0
4 голосов
/ 03 ноября 2010

Просто немного разнообразия:

x = 1 / (x + 1);

x = (x == 0);

x = (x != 1);

Не уверен, считаете ли вы == и != арифметическими операторами. Вероятно, нет, и, очевидно, хотя они работают в C, более строго типизированные языки не преобразуют результат в целое число.

4 голосов
/ 03 ноября 2010
int flip(int i){
    return 1 - i;
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...