È !!(x)
garantito dallo standard per restituire 0/1?doppia negazione in C: è garantito il ritorno 0/1?
Nota che io sono non che chiede di C++, dove è definito un tipo di bool.
È !!(x)
garantito dallo standard per restituire 0/1?doppia negazione in C: è garantito il ritorno 0/1?
Nota che io sono non che chiede di C++, dove è definito un tipo di bool.
Sì, in C99, vedere §6.5.3.3/4:
Il risultato dell'operatore negazione logica! è se il valore del suo operando confronta diverso da 0, 1 se il valore del suo operando confronto uguale a 0. Il risultato ha tipo int. L'espressione! E è equivalente a (0 == E).
Così !x
e !!y
può produrre solo 0 o 1, come int
s.
Per altri operatori, in C99, puoi anche Is the "true" result of >, <, !, &&, || or == defined?
grazie. solo se sei curioso del perché: lo sto usando per la competizione uni, dove il mio codice girerà senza ottimizzazioni gcc, ho trovato usando '!! x' diminuendo il tempo del mio codice di ~ 5% quindi' x = (x? 1: 0) '. Comunque, grazie per la citazione dello standard, è stato molto utile. – amit
Questo è un commento molto, ma è troppo lungo. (Per favore non sottovalutarlo solo su questa base.)
Ho trovato un documento molto bizzarro mentre cercavo lo standard per rispondere alla tua domanda: The New C Standard: An Economic and Cultural Commentary. E dicono che il mondo accademico è sotto-finanziato. (Here è il PDF completo di 2083 pagine da 10,5 MB. Il primo collegamento è solo la sezione sulla doppia negazione.)
Ha questo da dire sul tema della doppia negazione: "Un doppio negativo è molto spesso interpretato come un affermazione positiva in inglese (es. "Non è sconosciuto per i doppi negativi che si verificano nella sorgente C"). La stessa semantica che si applica in C. Tuttavia, in alcune lingue (ad esempio, spagnolo) un doppio negativo viene interpretato come rendere l'affermazione più negativo (questo uso si verifica in un inglese informale, ad esempio "non hai ancora visto nulla", ma è raro e corrucciato socialmente su 1). "
Credo che l'autore sarebbe felice sapendo che questo è di alcuna utilità nel rispondere alla tua domanda reale (la cui risposta è sì.)
Si prega di invertire questo ragazzo per lo sforzo di ricerca! –
i criteri per il voto sono utili, e questa risposta, come hai detto, 'non è di alcun tipo'. –
@PeteKirkham, sono rispettosamente in disaccordo, così come le FAQ: * "Usa i tuoi downvotes ogni volta che incontri un messaggio egregiamente sciatto, senza sforzo, o una risposta che è chiaramente e forse pericolosamente scorretta." * Comunque, buon Natale e felice anno nuovo. –
Quale standard? –
@DanFego: Ha un comportamento ben definito poiché C è stato prima standardizzato, quindi lo standard non dovrebbe avere importanza. – jamesdlin
possibile duplicato di [What is! 0 in C?] (Http://stackoverflow.com/questions/3661751/what-is-0-in-c) – jamesdlin