Почему -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
}
Читайте также:
- Тройки Пифагора, побитовые операции и Golang
- Спецификация Go: операторы, приоритет операторов
- Спецификация Go: арифметические операторы
Комментариев нет:
Отправить комментарий