Saltar al contenido

Módulo de número negativo en swift

Solución:

El veloz operador de resto % calcula el resto de la división entera:

a % b = a - (a/b) * b

dónde / es la división entera truncada. En tu caso

(-1) % 3 = (-1) - ((-1)/3) * 3 = (-1) - 0 * 3 = -1

Entonces el resto tiene siempre el mismo signo que el dividendo (a menos que el resto sea cero).

Ésta es la misma definición que se requiere, por ejemplo, en el estándar C99, ver por ejemplo ¿ANSI C o ISO C especifican lo que debería ser -5% 10 ?. Consulte también Wikipedia: Operación de módulo para obtener una descripción general de cómo se maneja esto en diferentes lenguajes de programación.

Una función de módulo “verdadera” podría definirse en Swift de la siguiente manera:

func mod(_ a: Int, _ n: Int) -> Int {
    precondition(n > 0, "modulus must be positive")
    let r = a % n
    return r >= 0 ? r : r + n
}

print(mod(-1, 3)) // 2

De la Guía de idiomas – Operadores básicos:

Operador restante

El operador restante (a % b) calcula cuántos múltiplos de b
cabrá dentro a y devuelve el valor que queda (conocido como el resto).

El operador restante (%) también se conoce como operador de módulo en otros idiomas. Sin embargo, su comportamiento en Swift para números negativos significa que es, estrictamente hablando, un resto en lugar de una operación de módulo.

Se aplica el mismo método al calcular el resto para un valor negativo de a:

-9 % 4   // equals -1

Insertar -9 y 4 en la ecuación produce:

-9 = (4 x -2) + -1

dando un valor restante de -1.

En tu caso no 3 encajará en 1, y el resto es 1 (lo mismo con -1 -> el resto es -1).

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : / /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *