C sharp/Operatori: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Distinzione tra operatori logici e operatori bit a bit (che sono concettualmente diversi in C#)
Riga 42:
 
==Operatori logici==
I seguenti operatori logici operano su valori booleani o interi.
{| {{prettytable}}
! Esempio || Spiegazione
|-
|<code>a && b || L'operatore binario <code>&&</code> lavora solo su operatori booleani. Valuta prima il valore del primo argomento. Se il suo valore è ''false'', restituisce ''false'' (questo perché falso è l'elemento assorbente della congiunzione, quindi qualunque sia il valore del secondo operatore, il risultato sarà ''false''); altrimenti, valuta anche il secondo parametro e restituisce la congiunzione tra i due. Questa tecnica è chiamata ''valutazione short-circuit''
|-
|<code>a <code><nowiki>||</nowiki></code> b ||L'operatore binario <code><nowiki>||</nowiki></code> lavora solo su operatori booleani. Valuta prima il valore del primo argomento. Se il suo valore è ''true'', restituisce ''true'' (questo perché vero è l'elemento assorbente della disgiunzione, quindi qualunque sia il valore del secondo operatore, il risultato sarà ''true''); altrimenti, valuta anche il secondo parametro e restituisce la disgiunzione tra i due.
|-
| <code>!a</code> || L'operatore unario <code>!</code> lavora su un solo valore booleano e ne restituisce la negazione (non).
|}
 
==Operatori bit a bit==
I seguenti operatori logici operano su valori booleani o interi.
{| {{prettytable}}
Line 56 ⟶ 68:
int n3 = n1 & n2; //vale 100, cioè 4
</source>
|-
|<code>a && b || L'operatore binario <code>&&</code> lavora solo su operatori booleani. Valuta prima il valore del primo argomento. Se il suo valore è ''false'', restituisce ''false'' (questo perché falso è l'elemento assorbente della congiunzione, quindi qualunque sia il valore del secondo operatore, il risultato sarà ''false''); altrimenti, valuta anche il secondo parametro e restituisce la congiunzione tra i due. Questa tecnica è chiamata ''valutazione short-circuit''
|-
|<code>a <nowiki>|</nowiki> b</code> || L'operatore binario <nowiki>|</nowiki> valuta entrambi gli operatori e ne restituisce la disgiunzione logica (vel) dei loro valori. Se gli operatori sono interi, la disgiunzione è fatta a livello di bit:
Line 69 ⟶ 79:
int n3 = n1 | n2; //vale 111, cioè 7
</source>
|-
|<code>a <code><nowiki>||</nowiki></code> b ||L'operatore binario <code><nowiki>||</nowiki></code> lavora solo su operatori booleani. Valuta prima il valore del primo argomento. Se il suo valore è ''true'', restituisce ''true'' (questo perché vero è l'elemento assorbente della disgiunzione, quindi qualunque sia il valore del secondo operatore, il risultato sarà ''true''); altrimenti, valuta anche il secondo parametro e restituisce la disgiunzione tra i due.
|-
|<code>a <nowiki>^</nowiki> b</code> || L'operatore binario <code>^</code> valuta entrambi gli operatori e ne restituisce la disgiunzione non inclusiva logica (aut) dei loro valori. Se gli operatori sono interi, la disgiunzione è fatta a livello di bit:
Line 82 ⟶ 90:
int n3 = n1 ^ n2; //vale 00, cioè 0
</source>
|-
| <code>!a</code> || L'operatore unario <code>!</code> lavora su un solo valore booleano e ne restituisce la negazione (non).
|-
|<code>~a</code> || L'operatore unario <code>~</code> lavora su un solo parametro che può essere booleano o intero. Se gli operatori sono interi, la negazione è fatta a livello di bit: