在Golang中转换指令

时间:2015-07-02 12:42:47

标签: c++ go bitwise-operators

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

问题:

  1. 当x是uint8类型时,为什么没有编译错误?
  2. 为什么x << 8得到结果0
  3. 对于C / C ++,

    unsigned int a = 128;
    printf("%d",a << 8); // result is 32768.
    

    有人可以解释一下吗?谢谢。

2 个答案:

答案 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)

  1. 因为uint8是无符号的8位整数类型。这是&#34;你&#34;代表。

  2. 由于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>