在Go的constant specification中,提到:
数字常量表示任意精度的精确值,不会溢出。
所以我试过了
const VeryVeryBigNumber = 1 << 200
它的工作原理。但是,我可以尝试的最大移位数是511,使用512会抛出:
shift count too large: 512
。
512代表什么?我无意使用它,我只是想知道为什么它在我的机器中限制为511(我使用ubuntu 64位并且去1.9.2)?
谢谢
512是任意限制。规范唯一说的是:
实现限制:尽管数字常量在语言中具有任意精度,但编译器可以使用精度有限的内部表示来实现它们。也就是说,每个实施必须:
表示至少256位的整数常量。
不幸的是,comments around the limits没有给出理由。
在某些时候,必须使用限制。我建议坚持所需的256。