go spec说:
<< left shift integer << unsigned integer
如果左侧是uint8
的类型
var x uint8 = 128
fmt.Println(x << 8) // it got 0, why ?
fmt.Println(int(x)<<8) // it got 32768, sure
问题:
x << 8
得到结果0
对于C / C ++,
unsigned int a = 128;
printf("%d",a << 8); // result is 32768.
有人可以解释一下吗?谢谢。
答案 0 :(得分:2)
左移运算符将把数字中的二进制数字移到左边的X个位置。这样可以在右侧添加X个@Override
public void render() {
super.render();
if (getScreen() != gameScreen && gameScreen != null) {
gameScreen.dispose();
gameScreen = null;
}
}
个号码,而号码A 0
只保留unit8
个位,这样当您8
时变量有
128
由于x = 1000 0000 == 128
x << 8
x= 1000 0000 0000 0000 == 32768
仅保持8位,因此我们最右边的8位是
uint8
您使用x = 0000 0000 == 0
得到正确数字的原因是int
至少有16位存储空间,并且很可能在您的系统上有32位。这足以存储整个结果。
答案 1 :(得分:0)
因为uint8
是无符号的8位整数类型。这是&#34;你&#34;代表。
由于uint8(128) << 8
移动了该值,因此将1000 0000
转换为0000 0000
。
int(x)
使其成为0000 0000 0000 0000 0000 0000 1000 0000
(在32位系统上,因为int
取决于架构),然后转变,使其成为0000 0000 0000 0000 1000 0000 0000 0000
或32768。 / p>