Perché a volte i bool vengono definiti "bandiere"? È solo una metafora o c'è qualche ragione storica dietro di esso?Perché i bool vengono a volte chiamati "bandiere"?
risposta
Le bandiere sono un modo antico per trasmettere informazioni. Una bandiera, se ignoriamo abbassandola a mezz'asta, ha solo due stati: alzati o non alzati. Ad esempio, considera una bandiera bianca: alzarla significa arrendersi. Non aumentarlo, lo stato predefinito, significa che non ti stai arrendendo.
Una variabile booleana, come una bandiera, ha solo due stati: true
e false
.
Flag può essere usato come sostantivo e come verbo: Per contrassegnare può significare notare, segno, segnale di qualcosa
Uno dei primi (ma probabilmente non il primo (Forse questo deriva dall'uso delle bandiere nautiche?)) uso della bandiera termine nella storia del computer può essere trovato nel IBM 1620 dal 1959 (il corsivo è mio):
memoria si accedeva due cifre decimali, allo stesso tempo (coppia cifra pari-dispari per i dati numerici o di una carattere alfanumerico per i dati di testo ). Ciascuna cifra decimale era 6 bit, composto da una parità dispari Vedi bit, un flag di bit, e quattro BCD bit per il valore della cifra nella seguente formato:
CF 8 4 2 1
il bit bandiera ha avuto diversi utilizzi:
- Nella cifra meno significativa è stato impostato per indicare un numero negativo (magnitudo firmato).
- E 'stato impostato su mark la cifra più significativa di un numero (wordmark).
- Nella cifra meno significativa degli indirizzi a 5 cifre è stato impostato per l'indirizzamento indiretto (un'opzione sul 1620 I, standard sul 1620 II). È possibile utilizzare l'indirizzamento a più livelli (è possibile persino inserire la macchina in un ciclo di indirizzamento indiretto infinito). Nelle 3 cifre centrali degli indirizzi a 5 cifre (sul 1620 II) erano impostati per selezionare uno dei 7 registri indice.
Quindi un po 'usato per contrassegnare o indicare qualcosa è stato chiamato bit di bandiera.
Ovviamente l'uso di "flag" in flag fields o registri di stato è quindi del tutto naturale.
Ma una volta stabilita l'associazione tra flag e bit, è anche comprensibile che il loro utilizzo possa diventare scambiabile. E naturalmente questo vale anche per le variabili booleane.
PS: la stessa domanda era già asked, ma sfortunatamente senza risposta.
- 1. I percorsi con parametri vengono chiamati due volte?
- 2. Perché i processi asincroni non vengono chiamati sincroni?
- 3. Perché i miei frammenti onSaveInstanceState() non vengono chiamati?
- 4. I percorsi di backbone non vengono chiamati
- 5. I delegati di Starscream non vengono chiamati
- 6. Perché [AssemblyInitialize] e [AssemblyCleanup] vengono chiamati due volte nello stesso assembly del progetto di test?
- 7. Gli script non vengono chiamati
- 8. Metodi pubblici e privilegiati in javascript: perché vengono chiamati così?
- 9. Perché le animazioni della vista a volte vengono troncate?
- 10. Perché rpb e rsp vengono chiamati registri di scopo generale?
- 11. I setter della proprietà .Net vengono mai chiamati implicitamente?
- 12. SKProductsRichiedi i metodi dei delegati non vengono mai chiamati
- 13. Perché a volte le dichiarazioni System.err vengono stampate prima?
- 14. perché i metodi delegati UIPickerView non vengono chiamati anche dopo aver impostato i protocolli delegati?
- 15. JSR303 convalidatori personalizzati chiamati due volte
- 16. AngularJS: i metodi personalizzati $ resource non vengono chiamati
- 17. Quando vengono creati e aggiornati i file chiamati serializzatore djangorestframework?
- 18. I metodi WebView non vengono chiamati in Android
- 19. Uscire da un blocco: vengono chiamati i distruttori?
- 20. Perché i bean Java sono chiamati "bean"?
- 21. Perché i collegamenti ipertestuali a volte non vengono visualizzati in un NSTextField con una NSAttributedString?
- 22. Perché i nomi delle immagini di processo a volte vengono riempiti con caratteri esadecimali?
- 23. I metodi di classe Python vengono sempre eseguiti due volte
- 24. UITextViewDelegate metodi non vengono chiamati (UITextView all'interno di UITableViewCell)
- 25. I filtri e i validatori vengono aggiunti due volte
- 26. Perché i distruttori della catena ereditaria di quell'istanza vengono chiamati, in ordine, dalla maggior parte derivata a quella meno derivata?
- 27. Bandiere con i servizi web
- 28. Perché le mie richieste jQuery ajax vengono eseguite più volte?
- 29. Perché qCritical o qDebug non dovrebbero funzionare quando vengono chiamati da un distruttore?
- 30. Pipeline scrapy spider_opened e spider_closed non vengono chiamati
Ho sempre immaginato che abbia a che fare con l'innalzamento o l'abbassamento delle bandiere per avviare e fermare il traffico. – Davislor