2016-06-16 2 views
-2

Я знаю, что 0 и NULL оценивают FALSE самостоятельно, и я знаю, что отрицательное целое или положительное целое оценивают самостоятельно.Делает ли if (! (- 1)) значение true или false в C?

Я понимаю, что эта операция не будет происходить после вычисления выражения, так if (-1) будет вычисляться TRUE, то применяя ! операнд будет означать NOT TRUE который равен FALSE. Является ли это правильным порядком операций и правильно ли, что if (!(-1)) будет оцениваться до FALSE?

+2

Вы пробовали? –

+0

[Попробуйте сами] (http://coliru.stacked-crooked.com/a/f1471249b698860a) –

+0

Рассматривая также ответ, связанный с порядком операций, а не только конечный результат. –

ответ

4

Оценка if (!(-1)) может быть разработана путем анализа приоритетов оператора.

Во-первых, унарный - прилагается к 1, который производит интеграл -1. Тогда это значение логически отрицается !. Это включает в себя свертывание -1 в логическое значение. Правило для этого в C хорошо и просто для целых типов: 0 - ложь, а все остальное - правдиво.

Поэтому -1 правдиво, и когда происходит логическое отрицание, мы получаем false.

Поэтому это утверждение является портативно ложным.

+0

, так что операция '!' Всегда применяется в порядке? –

4

В стандарте C любое ненулевое (положительное/отрицательное) значение имеет значение ИСТИНА.

Итак, (-1) оценивается как ИСТИНА и,! (- 1) курса, оцененного как FALSE. Следовательно, если (! (- 1)) будет оцениваться как ЛОЖЬ.

+1

Деталь: «В стандарте C любое ненулевое (положительное/отрицательное) значение имеет значение ИСТИНА». -> закрыть. Различные объекты имеют отрицательные, положительные, нулевые, NAN, нулевые указатели, ненулевые указатели, сложные и т. Д. Значения. Для '!' Единственный вопрос не в том, каково его значение, но если оно _ равномерно сравнивается с '0'. – chux

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