
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 6ufq0VLZn0DDkL80 2017-09-29 20:06:59 08:00 |
7 iceheart 2017-10-10 18:54:46 +08:00 via Android 257 是立即数,byte 装不下,编译器不知道咋处理,当然报错啦。 用变量转 byte,溢出了是另一回事,编译器不关心这个,所以编译过啦 |