Что такое & & & операция в C



#include <stdio.h>

volatile int i;

int main()
{
int c;

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

return 0;
}


вывод вышеуказанной программы скомпилирован с помощью gcc - это



0
1
1


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



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


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

583   2  

2 ответов:

это c = i && (&i);, причем вторая часть является избыточной, так как &i никогда не будет оценено как false.

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

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

внимание: адрес ‘i 'всегда будет оцениваться как 'true'

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

на максимальная Мунка правило, это:

c = i &&& i;

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

c = i && & i;

задает c 1, если и i и &i истинны, и 0, если одно из них является ложным.

для int любое ненулевое значение равно true. Для указателя любое ненулевое значение значение 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++

Comments

    Ничего не найдено.