Я обыскал стандарт, но не заметил упомянутую часть.! 0 гарантированно 1 в C89?
Это просто «ничего, кроме 0» и 1, или это зависит от компилятора?
Я обыскал стандарт, но не заметил упомянутую часть.! 0 гарантированно 1 в C89?
Это просто «ничего, кроме 0» и 1, или это зависит от компилятора?
В результате логической операции отрицания
!
равен 0, если значение операнда сравнивает равно 0, 1, если значение операнда сравнивается равным 0. В результате имеет типint
.
Появляется на C89/C90, C99 и C11.
Можете ли вы добавить ссылку, где вы ее нашли? – AustinWBryan
http://port70.net/~nsz/c/c89/c89-draft.html#3.3.3.3 –
Большое спасибо! – susdu
Как сказал hobbs в своем ответе, section 6.5.3.3.5 of the C standard утверждает, что !0
оценивает по методу 1
.
Кроме того, это поведение может быть использовано для нормализации целого числа к логическому значению (то есть 0
или 1
) с выражением !!x
.
x
= 0
, !!x
= !!0
= !1
= 0
.x
! = 0
, !x
= 0
, так !!x
= !0
= 1
.
Встроенные операторы, которые дают логически булевы результаты ('<', '>,' <=', '> = ',' == ','! = '' && '' || ''! ') Всегда дают точно '0' или' 1', типа 'int'. Некоторые функции библиотеки, такие как 'isdigit()', возвращают '0' для false или любое ненулевое значение для true. –