Что такое & amp; & amp; операция в С

#include <stdio.h>

volatile int i;

int main()
{
int c;

for (i = 0; i < 3; i++)
{
c = i &&& i;
printf("%d\n", c);
}

return 0;
}

Вывод вышеуказанной программы составлен с использованием gcc является

0
1
1

С -Wall или же -Waddress вариант, gcc выдает предупреждение:

warning: the address of ‘i’ will always evaluate as ‘true’ [-Waddress]

Как c оценивается в вышеуказанной программе?

194

Решение

Это c = i && (&i);со второй частью, являющейся избыточной, так как &i никогда не оценю false,

Для пользовательского типа, где вы можете перегружать унарный operator &, это может быть по-другому, но это все еще очень плохая идея.

если ты включить предупреждения, вы получите что-то вроде:

предупреждение: адрес «я» всегда будет оцениваться как «правда»

269

Другие решения

Здесь нет &&& оператор или токен в C. Но && (логическое «и») и & (унарный адрес или битовые операторы «и») существуют.

Посредством максимальный хруст Правило, это:

c = i &&& i;

эквивалентно этому:

c = i && & i;

Это устанавливает c до 1, если оба i а также &i истина, и до 0, если любой из них является ложным.

Для типа int любое ненулевое значение имеет значение true. Для указателя любое ненулевое значение является истинным (а адрес объекта всегда ненулевым). Так:

Это устанавливает c до 1, если i не равен нулю или 0 если i равно нулю.

Что подразумевает, что &&& используется здесь только для преднамеренного запутывания. Назначение может также быть любым из следующего:

c = i && 1;
c = !!i;
c = (bool)i;          // C++ or C with <stdbool.h>
c = i ? 1 : 0;        /* C */
c = i ? true : false; // C++
117

По вопросам рекламы [email protected]