var x uint64 = 257
var y int = 257
fmt.Println("rv is ", rv)
fmt.Println("rv2 is ", byte(x))
fmt.Println("rv3 is ", byte(y))
fmt.Println("rv3 is ", byte(int(257))) # constant 257 overflows byte 这里报错了
1
zdt3476 2017-09-29 16:12:56 +08:00
所以,想问啥?
|
2
mason961125 2017-09-29 16:13:27 +08:00
你把 int 转换成 byte 肯定溢出阿...int 占用空间比 byte 大多了
|
3
C0reFast 2017-09-29 16:14:39 +08:00
这个应该是编译期检查,257 是超出 byte 类型表达能力的,直接用 byte(257)和 var z byte = 257 是一样的。其他两个都是运行时了。
|
4
bin381 OP fmt.Println("rv3 is ", byte(y)) 这里是没有报错的
fmt.Println("rv3 is ", byte(int(257))) 这个是报错了 |
5
bin381 OP |
6
cholerae 2017-09-29 20:06:59 +08:00 1
|
7
iceheart 2017-10-10 18:54:46 +08:00 via Android
257 是立即数,byte 装不下,编译器不知道咋处理,当然报错啦。
用变量转 byte,溢出了是另一回事,编译器不关心这个,所以编译过啦 |