这里其实主要是翻译http://blog.golang.org/constants,其中An exercise: The largest unsigned int 部分。
如何构造最大的无符号数。对于确定位数的无符号数,只要移位即可,例如:对于uint32,只要const MaxUint32 = 1<<32 - 1 。
但是,对于不确定位数的uint,就不能这样了,其实,我们知道,最大的无符号数和-1在位数上是一样的。但是,无论是 const
MaxUint uint = -1 // Error: negative value , 还是const MaxUint uint = uint(-1) // Error:
negative value
,都不能通过编译,原因自然是类型与范围的冲突了。但运行时,-1的值确实可以传递给无符号是,怎么通过编译,又将这个值传给无符号数呢?可以
var u uint
var v = -1
u = uint(v)
这样就搞定了。另一种方法就是对0取反。区别是,0取反后,是无限多个1,那么有限范围的uint去接它,显然会被编译器认为损失精度了。办法是先构造出确定位数的0,再取反,如下:
const MaxUint = ^uint(0)
这便是两种获得最大无符号数的方法了。
有疑问加站长微信联系(非本文作者)