#c #integer #zero
#c #целое число #ноль
Вопрос:
Эта программа анекдотически показывает, что целочисленное значение ! 0
равно 1
:
#include <stdio.h>
int main( int argc, char* argv[] ) {
printf( "%dn", ! 0 );
return 0;
}
$ gcc --version amp;amp; gcc -g ./main.c amp;amp; ./a.out
gcc (Debian 6.3.0-18 deb9u1) 6.3.0 20170516
Copyright (C) 2016 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
1
$
Гарантируется ли это каким-либо стандартом или может ! 0
когда-либо оцениваться до любого другого ненулевого целого значения?
Комментарии:
1. Стандарт ISO C должен объяснить это очень четко. Вы там смотрели?
2. @NateEldredge — действительно, это там, как показал ответ Джона. Честно говоря, я всегда боялся пытаться искать информацию таким образом — эти стандартные документы всегда казались такими большими и подавляющими; Я, честно говоря, поражен, что люди могут найти там информацию так быстро, как им кажется.
3. Это приходит с практикой. Не бойтесь, просто прочитайте и попытайтесь понять, что вы можете. С большей экспозицией это станет более знакомым.
4. @StoneThrow: разумный компромисс cppreference.com , который, несмотря на название, охватывает как C, так и C . Он довольно точно соответствует стандартам, но немного более удобен для пользователя. Он организован как стандарты, поэтому я нашел соответствующую страницу в разделе «C reference -> Expressions -> Operators: logical» и получил ответ: «Его значение равно 1, если выражение принимает значение, равное нулю».
5. @StoneThrow: они похожи на любую другую ссылку — начните с оглавления и индекса, и вы сможете найти то, что вам нужно.
Ответ №1:
Гарантируется, что оно будет равно 1
.
6.5.3.3 Унарные арифметические операторы
…
5 Результат оператора логического отрицания!
равен 0, если значение его операнда сравнивается неравным 0, 1, если значение его операнда сравнивается равным 0. Результат имеет типint
. Выражение!E
эквивалентно(0==E)
.