将一个字节移位超过8位

hug*_*gie 4 c bit-manipulation

这里 从字节缓冲区转换回unsigned long int时:

  unsigned long int anotherLongInt;

  anotherLongInt = ( (byteArray[0] << 24) 
                   + (byteArray[1] << 16) 
                   + (byteArray[2] << 8) 
                   + (byteArray[3] ) );
Run Code Online (Sandbox Code Playgroud)

其中byteArray声明为 unsigned char byteArray[4];

题:

我以为byteArray[1]只是一个unsigned char(8位).当左移16时,不会将所有有意义的位移出并用0填充整个字节吗?显然它不是8位.也许它正在移动整个byteArray,这是一个连续的4字节?但我不知道它是如何工作的.

cni*_*tar 8

在算术方面byteArray[0]是促进要么int或者unsigned int,这样的转变是合法的,甚至懂事(我想与只处理unsigned做按位的东西时,类型).

6.5.7按位移位运算符

对每个操作数执行整数提升.结果的类型是提升的左操作数的类型.

整数促销:

6.3.1.1

如果int可以表示原始类型的所有值,则该值将转换为int; 否则,它将转换为unsigned int.这些被称为整数促销.