È VERO, ha sempre avuto un valore diverso da zero?

Ho un collega che sostiene che la VERA utilizzato per essere definito come 0 e tutti gli altri valori erano FALSE. Potrei giurare che ogni lingua con cui ho lavorato, se si potrebbe anche ottenere un valore booleano, che il valore FALSE è 0. Fatto VERO usato per essere 0? Se è così, quando abbiamo fatto a passare?

InformationsquelleAutor DMKing | 2008-09-19

 

22 Replies
  1. 28

    0 /non-0 cosa il vostro collega è confuso probabilmente si riferisce a quando le persone utilizzano i valori numerici la restituzione di un valore che indica il successo, non la verità (cioè, in uno script bash e alcuni stili di C/C++).

    L’utilizzo di 0 = successo consente una maggiore precisione nella definizione cause di errore (ad esempio, 1 = file mancante 2 = arto manca, e così via).

    Come una nota a margine: in Ruby, il solo falsi valori sono a zero e false. 0 è vero, ma non rispetto ad altri numeri. 0 è vera perché è un’istanza dell’oggetto 0.

  2. 20

    Potrebbe essere un riferimento a un codice di 0, che nella maggior parte dei casi, dopo un processo che ha eseguito un codice di 0 dire “Ehi, tutto ha funzionato bene, senza problemi.”

    • Con la giustificazione che non c’è più niente da dire se ha funzionato, mentre se non è riuscito, ci sono un sacco di non-ritorno a zero codici per indicare che tipo di errore è stato.
    • ah … il buon vecchio COM
    • E quindi il comando unix ‘vero’ non fa altro che emettere un codice di ritorno è 0.
  3. 12

    Ho lavorato presso una società con una grande quantità di vecchio codice C. Alcune delle intestazioni condivise definito i propri valori per il VERO e il FALSO, e alcuni lo hanno fatto, in effetti, sono VERA come 0 e FALSE, come 1. Questo ha portato alla “verità guerre”:

    /* like my constants better */
    #undef TRUE
    #define TRUE 1
    
    #undef FALSE
    #define FALSE 0
    
    • Voto perché sono stato morso da che in passato 😉
  4. 8

    Se non altro, bash conchiglie ancora utilizzare 0 per vero, e 1 per il falso.

    • Sono stato poco a questo prima di troppo…
  5. 4

    Diverse funzioni nella libreria standard del C restituire un ‘codice di errore’ intero come risultato. Dal noErr è definito come 0, un rapido controllo può essere ‘se è 0, è Ok’. La stessa convenzione portato ad un processo Unix’ ‘codice di risultato”, che è un numero intero che ha dato qualche inidication su come un determinato processo finito.

    In Unix shell scripting, il codice di risultato di un comando appena eseguito è disponibile, e tipicamente utilizzato per indicare se il comando è ‘riuscito’ o non, con 0 che significa successo, e quant’altro di un programma specifico non successo condizione.

    Questo, tutti i test di costrutti in script di shell utilizzare il “successo” (che è, un codice di 0) a dire il VERO, e nulla altro da dire FALSE.

    Su un piano totalmente diverso, circuiti digitali frecuently uso ‘logica negativa’. che è, anche se è 0 volt è chiamato “0 binario’ e un valore positivo (comunemente +5v o +3.3 v, ma al giorno d’oggi non è raro usare +1,8 v) viene chiamato “binario 1′, alcuni eventi sono ‘affermato’ da un determinato pin di andare a 0. Penso che ci sia un po ‘ di rumore-resistente vantaggi, ma non sono sicuro circa le ragioni.

    Notare, tuttavia, che non c’è niente di ‘antico’ o un po ‘di tempo di commutazione’ su questo. Tutto quello che so su questo si basa su vecchie convenzioni, ma sono totalmente attuale e rilevante oggi.

  6. 3

    Non ne sono certo, ma posso dirvi questo: trucchi affidamento sulla sottostante la natura di VERO e FALSO sono inclini a errori perché la definizione di questi valori è il realizzatore della lingua (o, almeno, lo specificatore).

    • beh, in un linguaggio come il perl, dove c’è una libera definizione per la verità, è una cosa che si impara non solo di assegnare per ma per amore. Ma nel tipo di sicurezza regno della maggior parte dei linguaggi compilati, il vero e il falso sono piuttosto severi nelle loro definizioni.
    • Sì, ma lo fa diventare un potenziale problema – anche nella stessa lingua – se sei la conversione tra i compilatori, piattaforme, o anche solo l’aggiornamento all’ultima versione del linguaggio. Ecco perché ho sposato la fase di attuazione agnostico, a meno che non siate assolutamente certi della vostra piattaforma o avete bisogno di essere.
  7. 2

    Chiamate di sistema nella libreria standard del C in genere restituzione -1 in caso di errore e 0 in caso di successo. Anche il Fotran calcolato se l’istruzione (e probabilmente lo è ancora) salto ad uno dei tre numeri di riga a seconda delle condizioni di valutazione al minore, uguale o maggiore di zero.

    ad esempio: SE (I-15) 10,20,10

    dovrebbe verificare la condizione I == 15 saltare alla riga 20, se vero (restituisce zero) e la linea 10 in caso contrario.

    Sam è proprio sui problemi di basarsi su specifici conoscenza dei dettagli di implementazione.

  8. 2

    Regola generale:

    1. Conchiglie DOS (incluso) uso “0” “No
      Errore”… non è necessariamente vero.

    2. Linguaggi di programmazione di uso diverso da zero
      per indicare il vero.

    Detto questo, se siete in un linguaggio che permette di definire TRUE FALSE, definire e utilizzare sempre costanti.

  9. 1

    Ancora oggi, in alcune lingue (Ruby, lisp, …) 0 è vero, perché a tutto, tranne a zero, è vero. Più spesso 1 è vero. Comune di gotcha e quindi è a volte considerato una buona pratica per non fare affidamento su 0 false, ma per fare un esplicito di prova. Java richiede questo.

    Invece di questo

    int x;    
    ....
    x = 0;
    if (x)  //might be ambiguous
    {
    }
    

    Fare è esplicito

    if (0 != x)
    {
    }
    
    • Tecnicamente in Java, se le istruzioni sono valide solo per le espressioni booleane e i numeri interi non cast di valori booleani. In Java, è vero è vero e il falso è falso e non è un numero.
    • Java è il migliore per Booleano anomolies
  10. 1

    Ricordo che fa qualche VB programmazione in una maschera di access in cui il Vero è -1.

    • Penso che molti sapori di BASE valutare zero come falso e nulla che non sia zero, vero, ma definire la costante False come 0 e il costante Vero -1 (o tutti 1 in binario).
    • La maggior parte di BASE sapori non hanno gli operatori logici; tutti gli operatori sono bit per bit. Quindi (NON 0) -1 e i confronti restituiscono -1 se è true e 0 se falso.
  11. 1

    Ricordo PL/1 non aveva classe boolean. Si potrebbe creare un po ‘ e assegnare il risultato di un’espressione booleana. Quindi, utilizzare, ci si deve ricordare che 1 era falsa e 0 era vero.

  12. 1

    Per la maggior parte, false è definito come 0, ed è vero, è diverso da zero. Alcuni linguaggi di programmazione e utilizzo 1, -1, e alcuni usano qualsiasi valore diverso da zero.

    Per shell Unix, però, si utilizza l’opposto convenzione.

    La maggior parte dei comandi che vengono eseguiti in una shell Unix in realtà sono piccoli programmi. Che passa di nuovo un codice di uscita in modo che è possibile determinare se il comando ha esito positivo (valore 0) o se non è riuscito per qualche motivo (1 o più, a seconda del tipo di guasto).

    Questo è utilizzato in sh/ksh/bash shell interpreti all’interno di if/while/until i comandi per controllare condizioni:

    se il comando 
    quindi 
    # successo 
    fi

    Se il comando ha esito positivo (vale a dire, restituisce un codice di uscita diverso da zero), il codice che viene eseguita l’istruzione. Di solito, il comando che viene utilizzato è il [ comando, che è un alias per il comando di test.

  13. 1

    La cosa divertente è che dipende dalla lingua in uso. In Lua è vero == zero interne per le prestazioni.. Stesso per molti syscalls in C.

  14. 1

    È facile confondersi quando bash true/false dichiarazione di ritorno sono in un altro modo:

    $ false; echo $?
    1
    $ true; echo $?
    0
    
  15. 1

    Ho sentito e utilizzato vecchi compilatori dove true > 0 e false <= 0.

    Che uno dei motivi per cui non si desidera utilizzare se(puntatore) o se(numero) per verificare a zero, si potrebbe valutare di falso in modo imprevisto.

    Allo stesso modo, ho lavorato su sistemi in cui il valore NULL non era zero.

    • Haha divertente quello 0,1
  16. 1

    In linguaggio C, prima di C++, non vi era alcuna cosa come un valore booleano. I condizionali sono stati fatti da test di int. Zero significava false e non-zero significato vero. Così si potrebbe scrivere

    if (2) {
      alwaysDoThis();
    } else {
      neverDothis();
    }
    

    Fortunatamente C++ consentito un dedicato di tipo booleano.

    • Qualcuno vuole spiegare perché questo è stato trombato?
    • Perché è riproposto il dato in questione.
  17. 0

    In qualsiasi lingua che io abbia mai lavorato (risalente alla BASE della fine degli anni ‘ 70), di falso è stato considerato 0 e vero è stato non-zero.

  18. 0

    Non ricordo TRUE essere 0.
    0 è qualcosa di un programmatore C sarebbe tornato per indicare il successo, però. Questo può essere confuso con TRUE.

    Non è sempre 1 sia. Può essere -1 o semplicemente non-zero.

  19. 0

    Per le lingue senza una costruito nel tipo boolean, l’unica convenzione che ho visto è quello di definire VERO, come 1 e FALSE come 0. Per esempio, in C, la if istruzione verrà eseguita la clausola if se il condizionale espressione restituisce un valore diverso da 0.

    Ho anche visto una volta una codifica documento di linee guida che espressamente detto di non ridefinire il VERO e il FALSO. 🙂

    Se si utilizza un linguaggio che ha un costruito in boolean, come il C++, quindi le parole chiave true e false sono parte del linguaggio, e non si dovrebbe fare affidamento su come stanno effettivamente implementato.

    • Credo che le parole chiave true e false sono valori specificati dalla norma, in modo da poter contare su di loro.
    • Un certo numero di lingue, tra le vecchie versioni di VB, definire true/false come -1/0. Che è così che le operazioni bit per bit e le operazioni logiche fare la stessa cosa.
  20. 0

    In linguaggi come il C non c’era nessun valore booleano così si doveva definire il proprio. Potrebbe hanno lavorato su un non-standard BOOL sostituzioni?

  21. 0

    DOS e i codici di uscita da applicazioni che utilizzano in genere da 0 a significare il successo e non da zero a significare il fallimento di un certo tipo!

    DOS codici di errore sono 0-255 e quando testato con ‘errorlevel’ sintassi significa nulla sopra o tra il valore specificato, quindi, le seguenti partite 2 e sopra per la prima goto, 1 per il secondo e 0 (successo) a quella finale!

    IF errorlevel 2 goto CRS
    IF errorlevel 1 goto DLR
    IF errorlevel 0 goto STR
    
  22. 0

    Motore di Database SQL Server ottimizza l’archiviazione delle colonne bit. Se ci sono o inferiore a 8 bit colonne in una tabella, le colonne vengono memorizzati come 1 byte. Se ci sono da 9 a 16 bit colonne, le colonne vengono memorizzati come 2 byte, e così via.
    La stringa di valori TRUE e FALSE possono essere convertiti in bit valori: VERO è convertito a 1 e FALSO è convertito a 0.
    La conversione di bit promuove qualsiasi valore diverso da zero a 1.

    Ogni lingua può avere 0 come true o false
    Quindi, smettere di usare un numero di parole vero
    Lol
    O t e f 1 byte di archiviazione

Lascia un commento