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,我忘了:)