C语言位运算过程会将数据大小提升为int
a<<3这个表达式的运算结果类型为int,这是C标准规定。
#include<stdio.h>
int main()
{
unsigned char a = 0x8A;
a <<= 3;
printf("%X",a);
return 0;
}
C标准规定在进行位运算时,a<<3这个表达式,a运算时会被类型提升为int
int main()
{
char c = 0xcd;
unsigned short int length;
length = 0x00ff&c;
c = 0xab;
length = (length)|((c<<8)&(0xff00)); //length = abcd
printf("%d, %d, %d\n", sizeof(c<<8), sizeof((length)|((c<<8)&(0xff00))), sizeof(length));
system("pause");
return 0;
}
输出结果:4, 4, 2,即
sizeof(c<<8)
字节数为 4
sizeof((length)|((c<<8)&(0xff00)))
字节数为 4
sizeof(length)
字节数为 2