Czy !!(x)
jest gwarantowane przez standard, aby zwrócić 0/1?Podwójna negacja w C: czy gwarantuje powrót do 0/1?
Zauważ, że jestem nie z pytaniem o C++, gdzie zdefiniowano typ bool.
Czy !!(x)
jest gwarantowane przez standard, aby zwrócić 0/1?Podwójna negacja w C: czy gwarantuje powrót do 0/1?
Zauważ, że jestem nie z pytaniem o C++, gdzie zdefiniowano typ bool.
Tak, w C99, zobacz §6.5.3.3/4:
wynikiem logicznego operatora negacji! jest jeżeli wartość jej argumentu porównuje nierówny 0, jeżeli wartość jej argumentu porównuje równa 0. Wynik musi wpisać int. Wyrażenie! E jest równoważne (0 == E).
Tak !x
i !!y
może jedynie otrzymując 0 lub 1 int
s.
przypadku innych operatorów, w C99, patrz również Is the "true" result of >, <, !, &&, || or == defined?
dzięki. tylko jeśli jesteś ciekawy dlaczego: używam go do konkurencji uni, gdzie mój kod będzie działał bez optymalizacji gcc, znalazłem użycie '!! x' zmniejszającego czas mojego kodu o ~ 5%, a następnie' x = (x? 1: 0) '. W każdym razie, dzięki za cytat z normy, było to bardzo pomocne. – amit
To jest komentarz naprawdę, ale to zbyt długo. (Proszę nie głosujcie na tej samej zasadzie).
Znalazłem bardzo dziwaczny dokument, szukając standardu, by odpowiedzieć na twoje pytanie: The New C Standard: An Economic and Cultural Commentary. Mówią, że akademia jest niedofinansowana. (Here jest pełnym, 2083 strona 10.5MB PDF .Jednym ogniwem jest tylko sekcja o podwójnej negacji.)
Ma to do powiedzenia na temat podwójnej negacji: "Podwójny negatyw jest bardzo często interpretowany jako pozytywne stwierdzenie w języku angielskim (np. "nie jest nieznane, że podwójne negatywne zjawisko występuje w źródle C.") Ta sama semantyka, która ma zastosowanie w C. Jednak w niektórych językach (np. hiszpańskim) podwójne negatywne interpretowane jest jako składające się na stwierdzenie bardziej negatywny (takie użycie pojawia się w swobodnej mowie angielskiej, np. "jeszcze nic nie widziałeś", ale jest rzadko spotykane i jest źle widziane, gdy towarzyszy mu 1). "
wierzę, że autor będzie szczęśliwy wiedząc, że to nie ma sensu w ogóle w odpowiedzi na swoje prawdziwe pytanie (na które odpowiedź brzmi: tak.)
Proszę upomnij tego faceta za wysiłek badawczy! –
kryteria głosowania są użyteczne, a ta odpowiedź, jak powiedziałeś, "nie ma żadnego sensu". –
@PeteKirkham, z pełnym szacunkiem nie zgadzam się, tak jak najczęściej zadawane pytania: * "Użyj swoich pochlebstw za każdym razem, gdy natkniesz się na wyjątkowo niechlujny, nie obciążony wysiłkiem post, lub odpowiedź, która jest wyraźnie i być może niebezpiecznie niepoprawna." * W każdym razie, Wesołych Świąt i szczęśliwego Nowego Roku. –
jaki standard? –
@DanFego: To było dobrze zdefiniowane zachowanie, ponieważ C był najpierw standaryzowany, więc standard nie powinien mieć znaczenia. – jamesdlin
możliwy duplikat [Co to jest! 0 w C?] (Http://stackoverflow.com/questions/3661751/what-is-0-in-c) – jamesdlin