我不明白在 golang 中如何1<<s
返回0
if var s uint = 33
。而是1<<33
回归8589934592
。移位运算符转换如何以 0 值结束。
我正在阅读语言规范并停留在本节中: https ://golang.org/ref/spec#Operators
特别是文档中的这一段:
“移位表达式中的右操作数必须具有无符号整数类型,或者是由 uint 类型的值表示的无类型常量。 如果非常量移位表达式的左操作数是无类型常量,则首先将其隐式转换为类型它会假设移位表达式是否被单独的左操作数替换。”
官方 Golang 文档中的一些示例:
var s uint = 33
var i = 1<<s // 1 has type int
var j int32 = 1<<s // 1 has type int32; j == 0
var k = uint64(1<<s) // 1 has type uint64; k == 1<<33
更新:
另一个非常相关的问题,举个例子:
package main
import (
"fmt"
)
func main() {
v := int16(4336)
fmt.Println(int8(v))
}
本节目回归-16
数字如何4336转换-16为int16int8
慕莱坞森
皈依舞
相关分类