Go Quizzes 101 (2)
题目
package main
var n int = 5
func main() {
// 10 << 5 <=> 10 * 32
var x = byte(10 << n / 10)
var w = 10 << n
var y = byte(w / 10)
var z = byte(w) / 10
println(x, y, z)
}
分析
这道测验题考察点和上一篇差不多。
n
是类型确定的变量, 根据:
如果左操作数是一个类型不确定值并且右操作数是一个非常量,则左操作数将被首先转化为运算结果的期待设想类型。
所以:
var x = byte(10 << n / 10)
等价于
var x = byte(byte(10) << n / 10)
而 byte(10) << n
(截断前)结果为 320,二进制表示是 1 0100 0000
,截断后为 0100 0000
,即 64。所以 x=6
根据:
如果期待设想类型并没有被指定,则左操作数的默认类型将被视为它的期待设想类型。
所以
var w = 10 << n
等价于
var w = int(10) << n
则运算结果是,w 值为320,且为类型确定值,类型是 int
。
根据:
如果左操作数是一个类型确定值(则它的类型必定为整数),则此移位运算的结果也是一个和左操作数类型相同的类型确定值。
所以
var y = byte(w / 10)
等价于
var y = byte(int(32))
故 y=32
。
而对于
var z = byte(w) / 10
表达式来说,byte(w)
会被截断为 64, 故 z=6
。
综上,这道题的最终结果为 6 32 6
。
Comments