Мне просто интересно, есть ли в 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");
or
printf("%s",((k > i) XOR (k > j)) ? "Valid" : "Invalid");
Я поставил побитовое XOR ^, и получилось "Invalid". Помещение результатов двух сравнений в два целых числа привело к тому, что два целых числа содержат 1, следовательно, XOR дало ложное. Затем я попробовал это с помощью & и | побитовые операторы, и оба дали ожидаемые результаты. Все это имеет смысл, зная, что истинные условия имеют ненулевое значение, в то время как ложные условия имеют нулевые значения.
Мне было интересно, есть ли причина использовать логические && и || когда поразрядные операторы &, | и ^ работать точно так же?