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