цикл, использующий uint64, не остановится - PullRequest
0 голосов
/ 25 декабря 2018

Есть ли объяснение, почему цикл, использующий uint64, не остановится на 0?

Я пробовал то же самое для цикла с int, и он работает, как и ожидалось.

package main

import (
    "fmt"
)

func main() {
  i := uint64(5)
  for ; i>=uint64(0); i-- {
  fmt.Printf("step %d\n", i)
  }
}

Я ожидаю, что эта функция остановится на выходе step 0, но она переполняет int и продолжается вечно с step 18446744073709551615 и так далее

1 Ответ

0 голосов
/ 25 декабря 2018

Ваш цикл продолжается, пока i >= 0, но целое число без знака всегда больше или равно нулю.Целые числа без знака не могут быть отрицательными, поэтому ваш цикл никогда не завершится.

Попробуйте изменить i на int64 и посмотрите, будет ли он вести себя по-другому.: -)

Удачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...