>>和<<和C++中的数据类型

Tho*_*mas 1 c++ types bit-shift

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

下列:

unsigned int a = pow(2,31);
cout << (a << 1);
Run Code Online (Sandbox Code Playgroud)

确实会产生0,因为它int是32位,因此1向左移动,将其推入无效状态.

但以下

unsigned int a = 1;
unsigned char b = (unsigned char)a;
cout << (unsigned int)(b<<8);
Run Code Online (Sandbox Code Playgroud)

产生256.为什么?我的猜测是a char是8位,所以移动1左8位应该给零.

是否有功能/转移这样做?(即评估1<<8为0).

K-b*_*llo 7

窄积分值在使用时intunsigned int之前被提升.它被称为整体推广.