我无法理解在golang中如何通过
我正在阅读语言规范并卡在这个部分: https://golang.org/ref/spec#Operators 具体来说,是文档中的这一段:
“移位表达式中的右操作数必须具有无符号整数类型或者是可由uint类型的值表示的无类型常量。如果非常量移位表达式的左操作数是无类型常量,则首先会将其隐式转换为它将假定的类型,即左操作数本身。”
官方Golang文档中的一些示例:
1<<s
来返回0
,如果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
当将 int16
转换为 int8
时,数字 4336
如何变成 -16
呢?