小编Sal*_*d83的帖子

Gloang移位运算符转换

我不能在golang如何理解1<<s返回0如果var s uint = 33。但是1<<33返回8589934592。移位运算符转换如何以0值结束。

我正在阅读语言规范,并停留在本节中:https : //golang.org/ref/spec#Operators

特别是来自文档的这一段:

“移位表达式中的右操作数必须具有无符号整数类型,或者是可由uint类型的值表示的无类型常量。 如果非恒定移位表达式的左操作数是无类型常量,则首先将其隐式转换为该类型它会假设是否仅将shift表达式替换为其左操作数。”

来自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
Run Code Online (Sandbox Code Playgroud)

更新:

另一个非常相关的问题,例如:

package main

import (
    "fmt"
)

func main() {
v := int16(4336)
    fmt.Println(int8(v))
}
Run Code Online (Sandbox Code Playgroud)

该程序返回 …

type-conversion go operator-keyword

3
推荐指数
1
解决办法
90
查看次数

标签 统计

go ×1

operator-keyword ×1

type-conversion ×1