For loop Golang中For循环的模糊行为

For loop Golang中For循环的模糊行为,for-loop,go,For Loop,Go,我想做一些简单的循环如下: package main import "fmt" func main() { var i uint32 // code bellow works fine with int32 for i = 31; i >= 0; i-- { fmt.Println(i) } } 但是如果i的类型为uint32,那么这个循环是无止境的。如果i是int32就可以了 如果I具有类型uint32而不检查如果I==0,我如何打破这个循环

我想做一些简单的循环如下:

package main

import "fmt"

func main() {
    var i uint32 // code bellow works fine with int32
    for i = 31; i >= 0; i-- {
        fmt.Println(i)
    }
}
但是如果
i
的类型为
uint32
,那么这个循环是无止境的。如果
i
int32
就可以了


如果
I
具有类型
uint32
而不检查
如果I==0
,我如何打破这个循环?

I
属于类型
uint32
,因此一旦它达到
0
,再次递减将导致
uint32
的最大值。更改循环条件以检查:

var i uint32 // code bellow works fine with int32
for i = 31; i != 0xffffffff; i-- {
    fmt.Println(i)
}
试穿一下

或者使用
math.maxint32
常量:

var i uint32 // code bellow works fine with int32
for i = 31; i != max.MaxUint32; i-- {
    fmt.Println(i)
}
或者使用
^uint32(0)
表达式,其中
^
运算符是位补运算符,应用于
0
将为您提供一个所有位均为1的值:
uint32
的最大值

虽然如果你看代码,它不是直观的,很难理解。因此,您应该在不需要并且更简单的地方使用替代方法,例如使用
int32
并检查
i>=0
,或者使用向上循环,例如:

for i := uint32(0); i < 32; i++ {
    fmt.Println(31 - i)
}

i
属于
uint32
类型,因此一旦它达到
0
,再次递减将导致
uint32
的最大值。更改循环条件以检查:

var i uint32 // code bellow works fine with int32
for i = 31; i != 0xffffffff; i-- {
    fmt.Println(i)
}
试穿一下

或者使用
math.maxint32
常量:

var i uint32 // code bellow works fine with int32
for i = 31; i != max.MaxUint32; i-- {
    fmt.Println(i)
}
或者使用
^uint32(0)
表达式,其中
^
运算符是位补运算符,应用于
0
将为您提供一个所有位均为1的值:
uint32
的最大值

虽然如果你看代码,它不是直观的,很难理解。因此,您应该在不需要并且更简单的地方使用替代方法,例如使用
int32
并检查
i>=0
,或者使用向上循环,例如:

for i := uint32(0); i < 32; i++ {
    fmt.Println(31 - i)
}

好。。。我不能为负,所以你必须检查它何时变为0。或者你使用int32。无符号整数的所有值都是正的…因此你的条件将始终为真。好吧。。。我不能为负数,所以您必须检查它何时变为0。或者您使用int32。无符号整数的所有值都是正数…因此您的条件将始终为真。您忘记了免责声明:“不要这样做以保持代码可读”。感谢常量max.MaxUint32。我在找她:)解决了。
I!=^uint32(0)
也可以不用导入
数学
@kostix True,我忘记了:)您忘记了免责声明:“不要这样做以保持代码可读性”。感谢常量max.maxint32。我在找她:)解决了。
I!=^uint32(0)
也可以不用导入
数学
@kostix True,我忘了:)