Rust - Operadores bit a bit

Suponga que la variable A = 2 y B = 3.

No Señor Operador Descripción Ejemplo
1 & (Bit a bit AND) Realiza una operación booleana AND en cada bit de sus argumentos enteros. (A y B) es 2
2 | (BitWise OR) Realiza una operación booleana OR en cada bit de sus argumentos enteros. (A | B) es 3
3 ^ (XOR bit a bit) Realiza una operación OR exclusiva booleana en cada bit de sus argumentos enteros. OR exclusivo significa que el operando uno es verdadero o el operando dos es verdadero, pero no ambos. (A ^ B) es 1
4 ! (No bit a bit) Es un operador unario y opera invirtiendo todos los bits del operando. (! B) es -4
5 << (Mayús a la izquierda) Mueve todos los bits de su primer operando a la izquierda el número de lugares especificado en el segundo operando. Los nuevos bits se llenan de ceros. Cambiar un valor a la izquierda en una posición equivale a multiplicarlo por 2, cambiar dos posiciones equivale a multiplicar por 4, y así sucesivamente. (A << 1) es 4
6 >> (Mayús a la derecha) Operador de cambio a la derecha binario. El valor del operando izquierdo se mueve hacia la derecha el número de bits especificado por el operando derecho. (A >> 1) es 1
7 >>> (Desplazamiento a la derecha con cero) Este operador es como el operador >>, excepto que los bits desplazados a la izquierda son siempre cero. (A >>> 1) es 1

Ilustración

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);
}

Salida

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