Мне просто интересно, есть ли в C логический оператор XOR (что-то вроде && для AND, но для XOR). Я знаю, что могу разделить XOR на AND, NOT и OR, но простой XOR был бы намного лучше. Затем мне пришло в голову, что если я использую обычный битовый оператор XOR между двумя условиями, это может просто сработать. И для моих тестов это сделал.
Рассмотрим:
int i = 3;
int j = 7;
int k = 8;
Просто ради этого довольно глупого примера, если мне нужно, чтобы k было либо больше i , либо больше j , но не оба, XOR было бы очень удобно.
if ((k > i) XOR (k > j))
printf("Valid");
else
printf("Invalid");
или
printf("%s",((k > i) XOR (k > j)) ? "Valid" : "Invalid");
Я поставил битовый XOR ^ , и он выдал "Invalid". Помещение результатов двух сравнений в два целых числа привело к тому, что 2 целых числа содержали 1, следовательно, XOR выдает false. Затем я попробовал это с & и | побитовые операторы и оба дали ожидаемые результаты. Все это имеет смысл, зная, что истинные условия имеют ненулевое значение, тогда как ложные условия имеют нулевые значения.
Мне было интересно, есть ли причина использовать логические && и || когда побитовые операторы &, | и ^ работать точно так же?