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