2016-02-16 3 views
8

Я обыскал стандарт, но не заметил упомянутую часть.! 0 гарантированно 1 в C89?

Это просто «ничего, кроме 0» и 1, или это зависит от компилятора?

+3

Встроенные операторы, которые дают логически булевы результаты ('<', '>,' <=', '> = ',' == ','! = '' && '' || ''! ') Всегда дают точно '0' или' 1', типа 'int'. Некоторые функции библиотеки, такие как 'isdigit()', возвращают '0' для false или любое ненулевое значение для true. –

ответ

23

В результате логической операции отрицания ! равен 0, если значение операнда сравнивает равно 0, 1, если значение операнда сравнивается равным 0. В результате имеет тип int.

Появляется на C89/C90, C99 и C11.

+2

Можете ли вы добавить ссылку, где вы ее нашли? – AustinWBryan

+1

http://port70.net/~nsz/c/c89/c89-draft.html#3.3.3.3 –

+0

Большое спасибо! – susdu

4

Как сказал 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.

 Смежные вопросы

  • Нет связанных вопросов^_^