Los operadores son símbolos que le indican al compilador que realice operaciones matemáticas, lógicas o de comparación sobre valores. En Rust, es fundamental entender cómo se comportan los tipos de datos con estos operadores, ya que la precisión y la lógica dependen de ellos.

Los operadores aritméticos se utilizan para cálculos matemáticos básicos: suma (+), resta (-), multiplicación (*), división (/) y residuo (%). Un detalle crucial en Rust es que la división entre dos enteros trunca el resultado hacia cero (por ejemplo, 7 / 2 es 3, no 3.5). Para calcular potencias, Rust no utiliza un operador especial (como ^ en otros lenguajes, donde ^ es XOR), sino que emplea métodos como .pow() para enteros o .powf() para números de punto flotante.

Los operadores de comparación (==, !=, <, >, <=, >=) comparan dos valores y devuelven un tipo booleano (true o false). Para que dos tipos puedan compararse, deben implementar los rasgos PartialEq (igualdad) y PartialOrd (orden).

Los operadores lógicos permiten combinar condiciones. El operador && (AND) y || (OR) utilizan un mecanismo llamado “cortocircuito”: en un &&, si la primera condición es falsa, la segunda ni siquiera se evalúa porque el resultado ya es false. En un ||, si la primera es verdadera, se ignora la segunda. El operador ! (NOT) invierte el valor booleano.

Finalmente, Rust destaca por no tener un operador ternario clásico (como condicion ? a : b); en su lugar, se utiliza la expresión if para devolver un valor. Además, no existen los operadores de incremento o decremento ++ o --; para esto, se debe usar la asignación compuesta o una operación aritmética directa.

fn main() {
    // --- Operadores Aritméticos ---
    let a: i32 = 10;
    let b: i32 = 3;
    let suma = a + b;          // Suma: 13
    let division = a / b;       // División entera: 3 (trunca el decimal)
    let modulo = a % b;         // Residuo de la división: 1
    let potencia = a.pow(2);     // Potencia (10^2): 100

    // --- Operadores de Comparación ---
    let es_igual = a == b;      // Compara si son iguales: false
    let es_mayor = a > b;       // Compara si a es mayor que b: true

    // --- Operadores Lógicos ---
    // El operador && es "cortocircuito"
    let logico_and = es_igual && es_mayor; // false && true -> false
    // El operador || es "cortocircuito"
    let logico_or = es_igual || es_mayor;  // false || true -> true
    let logico_not = !es_igual;            // NOT false -> true

    // --- If como Expresión (Sustituye al operador ternario) ---
    let mensaje = if a > b { "Mayor" } else { "Menor" };

    // --- Asignación Compuesta y Mutabilidad ---
    let mut c = 10;
    c += 5; // Equivalente a c = c + 5

    // --- Operadores de Bits ---
    let bit_and = a & b; // Operación AND a nivel de bits

    println!(
        "Aritmética: {}, {}, {}, {}. Comparación: {}, {}. Lógica: {}, {}, {}. If: {}. Asignación: {}. Bit: {}",
        suma, division, modulo, potencia, es_igual, es_mayor, logico_and, logico_or, logico_not, mensaje, c, bit_and
    );
}

Explicación del Código


a y b son variables de tipo i32 (enteros de 32 bits) que sirven como base para las operaciones.
suma almacena el resultado de a + b (13).
division muestra la trunca de a / b, resultando en 3.
modulo obtiene el residuo de 10 / 3, que es 1.
potencia utiliza el método .pow(2) sobre a para calcular $10^2$.
es_igual resulta false al comparar si 10 == 3.
es_mayor resulta true ya que 10 > 3.
logico_and es false porque la primera condición (es_igual) es falsa, aplicando cortocircuito.
logico_or es true porque la segunda condición (es_mayor) es verdadera.
logico_not invierte es_igual (false) convirtiéndolo en true.
mensaje es una variable que recibe un valor mediante la expresión if, funcionando como un operador ternario para asignar "Mayor".
c es declarada con mut para permitir la asignación compuesta +=.
bit_and realiza una operación AND bit a bit entre a (1010) y b (0011), resultando en 2 (0010).

19