我已经查看了这个答案中给出的指南,但我仍然不明白位移。特别是我对起作用的数据类型感到困惑。
以下:
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)。