Int.rem în Kotlin

Intervale și conversii de numere Kotlin 1.1 (mod: 1.5)

rem (operatorul %) dă restul împărțirii, cu semnul deîmpărțitului; mod dă restul cu semnul împărțitorului.

Sintaxă
operator fun Int.rem(other: Int): Int   // a % b
fun Int.mod(other: Int): Int

Ce face Int.rem

a % b apelează funcția rem și returnează restul împărțirii lui a la b: 17 % 5 este 2. Pentru numere pozitive, rem și mod dau același rezultat.

Diferența apare la numere negative. rem păstrează semnul lui a: -7 % 3 este -1. mod are semnul lui b, deci pentru un b pozitiv rezultatul este mereu între 0 și b - 1: (-7).mod(3) este 2. Este varianta corectă pentru lucruri „circulare”, ca zilele săptămânii sau orele.

Împărțirea la zero (x % 0) aruncă ArithmeticException pentru întregi.

Parametri

Parametru Descriere
other Împărțitorul.

Ce returnează

Restul împărțirii (Int).

Exemple

Exemplul 1: Par sau impar

Un număr este par dacă restul împărțirii la 2 este 0.

fun main() {
    for (n in listOf(4, 7, 10, 13)) {
        println("$n este ${if (n % 2 == 0) "par" else "impar"}")
    }
    println(17.rem(5))
}

Rezultat

4 este par
7 este impar
10 este par
13 este impar
2

Exemplul 2: rem față de mod la numere negative

Pentru -7, rem dă -1, iar mod dă 2.

fun main() {
    for (a in listOf(7, -7)) {
        println("$a % 3 = ${a % 3}, ($a).mod(3) = ${a.mod(3)}")
    }
}

Rezultat

7 % 3 = 1, (7).mod(3) = 1
-7 % 3 = -1, (-7).mod(3) = 2

Exemplul 3: Ziua săptămânii, înainte și înapoi

Cu mod, mersul înapoi în timp rămâne mereu un index valid între 0 și 6.

fun main() {
    val zile = listOf("luni", "marți", "miercuri", "joi", "vineri", "sâmbătă", "duminică")
    val azi = 2
    println("Azi este ${zile[azi]}")
    for (deplasare in listOf(1, -3, 9, -10)) {
        println("Peste $deplasare zile: ${zile[(azi + deplasare).mod(7)]}")
    }
}

Rezultat

Azi este miercuri
Peste 1 zile: joi
Peste -3 zile: duminică
Peste 9 zile: vineri
Peste -10 zile: duminică

Greșeli frecvente

  • Folosești % cu numere negative ca index și primești IndexOutOfBoundsException pentru rezultatul negativ. Folosește mod.
  • Verifici imparitatea cu n % 2 == 1. Pentru numere negative restul este -1; scrie n % 2 != 0.

Comenzi înrudite

  • Int.toDouble: Conversii explicite între tipurile numerice: toDouble face un Int zecimal, toInt taie zecimalele unui Double.
  • Int.countOneBits: Numără câți biți de 1 are un număr în scrierea binară (de exemplu 7 = 111 are 3).
  • abs: abs returnează valoarea absolută a unui număr (fără semn); sign spune dacă numărul e negativ, zero sau pozitiv.