go规范说:


<<    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 是 uint8 类型时,为什么没有编译错误?

为什么x << 8得到结果0

对于 C/C++,


unsigned int a = 128;

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

谁能解释一下?谢谢你。