为了账号安全,请及时绑定邮箱和手机立即绑定

Golang 中的移位指令

Golang 中的移位指令

Go
largeQ 2021-10-18 16:32:10
go规范说:<<    left shift             integer << unsigned integer如果左侧的类型为 uint8:var x uint8 = 128fmt.Println(x << 8)      // it got 0, why ?fmt.Println(int(x)<<8)   // it got 32768, sure问题:当 x 是 uint8 类型时,为什么没有编译错误?为什么x << 8得到结果0对于 C/C++,unsigned int a = 128;printf("%d",a << 8); // result is 32768.谁能解释一下?谢谢你。
查看完整描述

2 回答

?
慕斯王

TA贡献1864条经验 获得超2个赞

左移运算符会将数字中的二进制数字向左移动 X 位。这具有将 X 个0's添加到右侧的效果,数字 Aunit8仅包含8位,因此当您拥有128变量时


x =            1000 0000 == 128

x << 8

x=   1000 0000 0000 0000 == 32768

由于uint8只保存 8 位,我们取最右边的 8 位,即


x =            0000 0000 == 0

使用 an 获得正确数字的原因int是 anint至少有 16 位的存储空间,并且很可能在您的系统上有 32 位。这足以存储整个结果。


查看完整回答
反对 回复 2021-10-18
  • 2 回答
  • 0 关注
  • 286 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信