i是类型的
uint32,因此一旦达到
0最大值,再次递减将导致最大值
uint32。更改循环条件以进行检查:
var i uint32 // pre bellow works fine with int32for i = 31; i != 0xffffffff; i-- { fmt.Println(i)}在Go Playground上尝试一下。
或使用
math.MaxUint32常数:
var i uint32 // pre bellow works fine with int32for 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)}或将循环变量的范围偏移+1,因此您可以测试
i >= 1或
i > 0:
for i := uint32(32); i > 0; i-- { fmt.Println(i-1)}


