Является !!(x)
гарантированным стандартом для возврата 0/1?
Обратите внимание, что я не, задавая вопрос о С++, где определяется тип bool.
Является !!(x)
гарантированным стандартом для возврата 0/1?
Обратите внимание, что я не, задавая вопрос о С++, где определяется тип bool.
Да, на C99, см. §6.5.3.3/4:
Результат оператора логического отрицания! 0, если значение его операнда сравнивается не соответствует 0, 1, если значение его операнда сравнивается с равным 0. Результат имеет тип int. Выражение! E эквивалентно (0 == E).
Итак, !x
и !!y
могут давать только 0 или 1, как int
s.
Для других операторов, на C99, см. также Является ли "true" результат > , <, && &, & thetas; или == определено?
Это действительно комментарий, но он слишком длинный. (Пожалуйста, не голосуйте только на этой основе.)
Я нашел очень странный документ, когда искал стандарт, чтобы ответить на ваш вопрос: Новый стандарт С: Экономический и культурный комментарий. И они говорят, что академия недофинансирована. (Здесь приведен полный PDF файл объемом 20,5 страниц объемом 2083 мегапикселя. Предыдущая ссылка - просто раздел о двойном отрицании.)
Это говорит о двойном отрицании:
Двойное отрицание очень часто интерпретируется как положительное утверждение на английском языке (например, "Неизвестно, что двойные отрицания встречаются в C-источнике"). Та же самая семантика, которая применяется в C. Однако в некоторых языках (например, в испанском) двойной отрицательный знак интерпретируется как делающий утверждение более отрицательным (такое использование встречается в обычной английской речи, например, "вы еще ничего не видели"), но это редко и не одобряется в социальном отношении 1).
Я полагаю, что автор был бы счастлив, зная, что это бесполезно для ответа на ваш реальный вопрос (ответ на который да.)