operatori:
OR / AND / XOR
i tre operatori funzionano come gli operatori logici solo che agiscono sul singolo bit
OR |
se uno dei due bit o entrambi é 1 allora uguale a 1
| int a=147; | 1 0 0 1 0 0 1 1 |
| int b=97; | 0 1 1 0 0 0 0 1 |
| int c=a|b; = 243 | 1 1 1 1 0 0 1 1 |
AND &
solo se entrambi i bit sono 1 uguale a 1
| int a=147; | 1 0 0 1 0 0 1 1 |
| int b=97; | 0 1 1 0 0 0 0 1 |
| int c=a&b; = 1 | 0 0 0 0 0 0 0 1 |
XOR ^
come OR ma se entrambi sono 1 allora uguale 0
| int a=147; | 1 0 0 1 0 0 1 1 |
| int b=97; | 0 1 1 0 0 0 0 1 |
| int c=a^b; = 232 | 1 1 1 1 0 0 1 0 |
scorrimenti (shift)
l'operatore fa scorrere a destra o sinistra i bit di un numero di posizioni specificato.
scorrimento sinistra <<
saranno aggiunti dei 0 nei posti vuoti a destra, i bit usciti andranno persi.
| int a=42; | 0 0 1 0 1 0 1 0 |
| int c=a<<1 = 84 | 0 1 0 1 0 1 0 0 |
scorrimento destra >>
saranno aggiunti dei 0 o 1 nei posti vuoti a sinistra a seconda se valore del primo bit sia 0 o 1, i bit usciti andranno persi.
| int a=43; | 0 0 1 0 1 0 1 1 |
| int c=a>>1 = 21 | 0 0 0 1 0 1 0 1 |
| int a=-86; | 1 0 1 0 1 0 1 0 |
| int c=a>>1 = -43 | 1 1 0 1 0 1 0 1 |
complemento a uno
inverte i bit, ovvero trasforma gli 1 in 0 e gli 0 in 1
| i=10; | 0 0 0 0 1 0 1 0 |
| j =~i;= 245 | 1 1 1 1 0 1 0 1 |