воскресенье, 24 мая 2020 г.

Деление по модулю в Golang

Почему -1 не посчитался нечетным?

func Odd(n int) bool {
    return n%2 == 1
}

func main() {
    fmt.Println(Odd(-1)) // false
}

Ответ

Оператор остатка может дать отрицательный ответ, если дивиденд отрицательный: если n нечетное отрицательное число, n % 2 равно -1.

Частное q = x / y и остаток r = x % y удовлетворяют соотношениям

x = q*y + r  и  |r| < |y|

где х / у усекается до нуля.

 x     y     x / y     x % y
 5     3       1         2
-5     3      -1        -2
 5    -3      -1         2
-5    -3       1        -2

Существует одно исключение: если x является наиболее отрицательным значением своего типа, частное q = x / -1 равно x.

Одно из решений - написать такую ​​функцию:

// Odd указывает, является ли n нечетным числом.
func Odd(n int) bool {
    return n%2 != 0
}

Вы также можете использовать побитовый оператор И &.

// Odd указывает, является ли n нечетным числом.
func Odd(n int) bool {
    return n&1 == 1
}


Читайте также:


Комментариев нет:

Отправить комментарий