Rust - Operatori bit per bit

Assumi la variabile A = 2 e B = 3.

Suor n Operatore Descrizione Esempio
1 & (AND bit per bit) Esegue un'operazione booleana AND su ogni bit dei suoi argomenti interi. (A e B) è 2
2 | (BitWise OR) Esegue un'operazione booleana OR su ogni bit dei suoi argomenti interi. (A | B) è 3
3 ^ (XOR bit per bit) Esegue un'operazione booleana OR esclusivo su ogni bit dei suoi argomenti interi. OR esclusivo significa che uno degli operandi uno è vero o l'operando due è vero, ma non entrambi. (A ^ B) è 1
4 ! (Bitwise non) È un operatore unario e opera invertendo tutti i bit nell'operando. (! B) è -4
5 << (Maiusc sinistro) Sposta tutti i bit nel suo primo operando a sinistra del numero di posizioni specificato nel secondo operando. I nuovi bit vengono riempiti con zeri. Spostare un valore a sinistra di una posizione equivale a moltiplicarlo per 2, spostare due posizioni equivale a moltiplicarlo per 4 e così via. (A << 1) è 4
6 >> (Maiusc destro) Operatore binario di spostamento a destra. Il valore dell'operando sinistro viene spostato a destra del numero di bit specificato dall'operando destro. (A >> 1) è 1
7 >>> (Spostamento a destra con zero) Questo operatore è proprio come l'operatore >>, tranne per il fatto che i bit spostati a sinistra sono sempre zero. (A >>> 1) è 1

Illustrazione

fn main() {
   let a:i32 = 2;     // Bit presentation 10
   let b:i32 = 3;     // Bit presentation 11

   let mut result:i32;

   result = a & b;
   println!("(a & b) => {} ",result);

   result = a | b;
   println!("(a | b) => {} ",result) ;

   result = a ^ b;
   println!("(a ^ b) => {} ",result);

   result = !b;
   println!("(!b) => {} ",result);

   result = a << b;
   println!("(a << b) => {}",result);

   result = a >> b;
   println!("(a >> b) => {}",result);
}

Produzione

(a & b) => 2
(a | b) => 3
(a ^ b) => 1
(!b) => -4
(a << b) => 16
(a >> b) => 0