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 位。这足以存储整个结果。
- 2 回答
- 0 关注
- 286 浏览
添加回答
举报
0/150
提交
取消