Operatori logici

4

Un tipico lang di programmazione delle parentesi graffe presenta due tipi di AND e OR: logico e bit a bit. && e || per operazioni logiche e & e | per operazioni bit a bit. Le operazioni logiche sono più comunemente utilizzate delle operazioni bit a bit, perché le operazioni logiche sono più lunghe da scrivere? Pensi che dovrebbero essere cambiati?

    
posta Ming-Tang 25.09.2010 - 21:53
fonte

6 risposte

4

Probabilmente una cosa legacy. Le operazioni bit a bit potrebbero non essere molto comuni al giorno d'oggi, ma quando si codifica su un livello molto basso le si usano sempre. Quindi, quando C è stato concepito negli anni '70 o quando è stato creato, gli OP bit a bit erano probabilmente più comuni degli OP logici. E dal momento che C lo ha in questo modo, prendo molti altri linguaggi (come Java, indirettamente dal C ++) seguendo la stessa convenzione.

Ora che ho usato la doppia notazione ( && e || ) per così tanto tempo, sarei confuso solo se fossero passati. Ma per i programmatori completamente nuovi, sarebbe probabilmente una bella cosa: si risparmia un enorme 50% per operazione logica! Immagina la produttività! ^^

EDIT: a condizione che questi cambiamenti siano stati apportati in una nuova lingua, ovviamente, non in altre lingue.

    
risposta data 25.09.2010 - 22:20
fonte
2

Rispondendo all'ultima parte della tua domanda: pensi che dovrebbero essere scambiati? Devo presumere che, perché non hai chiesto "se sto creando una nuova lingua ..." significa per le lingue esistenti.

NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO

Se questo è stato convertito in una lingua esistente, non vorrei nemmeno cominciare a pensare ai bug che si sarebbero verificati ... significherebbe che ogni riga di ogni app che viene trasferita deve essere vista esplicitamente da un sviluppatore.

SE stai costruendo una lingua, vuoi liberarti di & & e ||, quindi si prega di utilizzare simboli completamente diversi per bit a bit e non passare loro. Ancora, lo lascerei da solo o userei simboli diversi per tutti loro. Alcuni di noi hanno bisogno di passare da una lingua all'altra;)

    
risposta data 25.09.2010 - 22:54
fonte
1

Penso che sia perché i processori non hanno valori booleani (quindi, nessuna nozione di operazioni logiche), quindi nelle prime implementazioni l'operatore bit a bit potrebbe essere stato implementato prima degli operatori logici.

    
risposta data 25.09.2010 - 22:07
fonte
0

Gli OP bitwise erano in circolazione prima dei linguaggi di alto livello, cioè fanno parte della maggior parte dei set di istruzioni di base della CPU (come istruzioni AND o OR su registri o memoria). & e | sono diventato una scorciatoia per loro in C e in altri linguaggi di alto livello.

C'è un punto di sequenza dopo gli operatori logici & e || (cioè, l'operando di sinistra è completamente valutato prima dell'operando di destra). Non sono intrinsecamente parte del set di istruzioni della CPU. Quindi penso che sia appropriato che abbiano il doppio simbolo.

    
risposta data 25.09.2010 - 22:24
fonte
0

Tutta la discussione su quale è venuto prima è oltre il punto. Sono operazioni completamente diverse. Solo perché la lingua non ha un nome booleano non significa che i progettisti non abbiano capito il concetto. '&' è per operare su bit, "& &" è per operare su stati vero / falso (dove vero è definito come non zero). C'è una buona ragione che 1 & 2! = 1 & 2.

    
risposta data 26.09.2010 - 01:45
fonte
0

Se progettando una lingua da zero al giorno d'oggi e senza alcun bagaglio legacy di cui preoccuparsi allora, probabilmente avrebbe più senso usare & e | per le operazioni logiche e && e | per bit a bit operazioni. Ma provare a convertirli ora per le lingue esistenti sarebbe pazzesco (dato che potrebbe infrangere tutti i software esistenti) e sarebbe probabilmente troppo confuso usarli per nuove lingue da quando i programmatori esistenti si sono abituati al loro significato attuale.

    
risposta data 26.09.2010 - 21:36
fonte

Leggi altre domande sui tag