1

我已经查看了这个答案中给出的指南,但我仍然不明白位移。特别是我对起作用的数据类型感到困惑。

以下:

unsigned int a = pow(2,31);
cout << (a << 1);

确实像我预期的那样产生 0,因为它int是 32 位,所以1将它向左移动,将它推到空无一物。

但以下

unsigned int a = 1;
unsigned char b = (unsigned char)a;
cout << (unsigned int)(b<<8);

产生 256。这是为什么呢?我的猜测是 achar是 8 位,因此将 1 向左移动 8 个位置应该为零。

有没有这样做的功能/班次?(即评估1<<8为 0)。

4

1 回答 1

7

窄整数值被提升为intunsigned int在被使用之前。这叫做积分提升

于 2012-06-09T20:16:06.583 回答