package main
import "fmt"
const (
Big = 1 << 100
Small = Big >> 99
)
func needInt(x int) int { return x*10 + 1 }
func needFloat(x float64) float64 {
return x * 0.1
}
func main() {
fmt.Println(needInt(Small))
fmt.Println(needFloat(Small))
fmt.Println(needFloat(Big))
fmt.Println(needInt(Big))
}
Q1 :<< >> 是什么运算符?
Q2:最后一行命令会有报错 “prog.go:19: constant 1267650600228229401496703205376 overflows int”
Q3:文中提到“一个未指定类型的常量由上下文来决定其类型。”具体含义
小白 求帮助求鄙视
更多评论
A1:
`<<`和`>>`是移位操作,分别是左移和右移,`1 << 100`即二进制1往左移100位,就是1后面100个0,也即2的100次方。
A2,Q3:
Big的类型是float64,Big的值很大,因此Go会根据这个值的大小1267650600228229401496703205376来决定Big的类型,它的类型是float64类型,而不是int。int类型还和操作系统有关,64位是int64,32位是int32,不管是64位还是32位,这个大小都超过了int的最大值,因此Go判断其类型为float64。而`needInt`需要int参数,所以报错。
#1