La mia migliore risposta, dalla massa degli altri discussi.
Questa convenzione proviene dall'Assemblea.
Quando esegui un confronto, ad es. se a > b o se a = b
ciò che effettivamente accade (almeno in motorola 6502) è che il processore SOTTRATTO i due valori! allora il risultato è facilmente negoziabile, perché è zero o qualcosa di diverso da zero.
l'istruzione branch è fatta per funzionare con zero essendo un valore ottimizzato perché tipicamente vuoi diramarti quando un indice array raggiunge lo zero.
quindi, branchng è ottimizzato per gli zeri, e quindi il branching basato sul confronto si è evoluto per usare zero per indicare true di false di un'operazione booleana come = o >.
PS
Anche perché un confronto bit a bit di due numeri è fondamentalmente la stessa cosa di una sottrazione bit per bit usando il link [Adder] - sottrattore nell'ALU. quindi in questo modo, non hai istruzioni extra in giro. Ma se utilizzi la sottrazione per il confronto booleano devi consentire che il risultato della sottrazione di interi sia zero significherà che qualcosa è vero o falso . quindi falso è zero.
sooooooooooo
Suppongo che la ragione per mantenerla in questo modo sia perché, in origine, c'erano buone ragioni per farlo, oltre a "ci siamo sentiti come". quelle buone ragioni che sospetto sono ora irrilevanti, ma, nel profondo di OTOH, sospetto anche che le stesse ottimizzazioni si verifichino con i booleani nelle lingue moderne
Wikipedia nota che:
Bandiera zero
Determinare se due valori sono uguali richiede ALU per determinare se il risultato è zero. Questo può essere ottenuto alimentando ciascun bit del risultato in una porta NOR. La bellezza di questo è che un singolo gate NOR multiporta richiede meno hardware di un intero array di gate equivalenti a 2 porte.
link
Quindi, zero ha un significato speciale per CPU e ALU. Questo è il motivo per cui zero è falso.
sospetto che il design di ALU non abbia trancato questa fondamentale ottimizzazione del design, anche nei processori più recenti, e come tale, le persone che scrivono compilatori in assembly o in prossimità di linguaggi di assemblaggio probabilmente devono ancora affrontare la "sporcizia" dell'equazione con zero . E dovresti sapere anche tutto questo. solo perché.
link
"Molti programmatori che potresti intervistare in questi giorni sono propensi a considerare la ricorsione, i puntatori e persino le strutture dati come un dettaglio di implementazione stupido che è stato sottratto dai tanti e felici linguaggi di programmazione di oggi." Quando è stata l'ultima volta dovevi scrivere un algoritmo di ordinamento? "ridacchiavano.
Tuttavia, non mi interessa davvero. Voglio che il mio medico ER comprenda l'anatomia, anche se tutto ciò che deve fare è mettere i nodi del defibrillatore computerizzato sul mio petto e premere il grande pulsante rosso, e voglio che i programmatori conoscano la programmazione fino al livello della CPU, anche se Ruby on Rails leggi la tua mente e costruisci per te un sito di networking sociale collaborativo Web 2.0 completo con tre clic del mouse. "
link