在命令行和游戏中设置Go整数溢出

在命令行和游戏中设置Go整数溢出,go,Go,该程序在我的机器上运行良好(go1.2.1 linux/amd64): 主程序包 输入“fmt” 常量bigint=1通常情况下的常量 常数本身的精度不受限制,但在代码中使用时,它们会转换为合适的类型。 从: 常量可以通过常量声明或转换显式指定类型,也可以在变量声明、赋值或表达式中用作操作数时隐式指定类型。如果无法将常量值表示为相应类型的值,则为错误。例如,3.0可以指定任何整数或任何浮点类型,而2147483648.0(等于nemo所述的1,您可以为常量指定类型。只需指定int64,它就可以正

该程序在我的机器上运行良好(go1.2.1 linux/amd64):

主程序包
输入“fmt”
常量bigint=1通常情况下的常量
常数本身的精度不受限制,但在代码中使用时,它们会转换为合适的类型。
从:


常量可以通过常量声明或转换显式指定类型,也可以在变量声明、赋值或表达式中用作操作数时隐式指定类型。如果无法将常量值表示为相应类型的值,则为错误。例如,3.0可以指定任何整数或任何浮点类型,而2147483648.0(等于nemo所述的1,您可以为常量指定类型。只需指定
int64
,它就可以正常工作:)

主程序包
输入“fmt”

const bigint int64=1当您将常量传递给Println时,它将按照规范转换为int。尝试使用uint64(bigint)获得完整的64位精度。啊,这样转换才有意义。还有一个谜团是为什么扫描仪会
1@zlatanski如对
1的回答所述
package main

import "fmt"

const bigint = 1<<62

func main() {
    fmt.Println(bigint)
}
const GoWhitespace = 1<<'\t' | 1<<'\n' | 1<<'\r' | 1<<' '
const a = 1 << 33
fmt.Println(a)
const a = 1 << 33
fmt.Println(int64(a))
s.Whitespace = GoWhitespace
const w = 1<<'\t' | 1<<'\n' | 1<<'\r' | 1<<' '

c := ' '

// fmt.Println(w & (1 << uint(c))) // fails with overflow error
fmt.Println(uint64(w) & (1 << uint(c))) // works as expected
package main

import "fmt"

const bigint int64 = 1<<62

func main() {
    fmt.Println(bigint)
}