C语言问题中两个8位二进制数合成一个16位二进制数的问题

2024-11-17 14:52:21
推荐回答(2个)
回答(1):

a<<8; //这是a的值左移8位, 而不是a左移了8位,a并没有变哦
a<<8 返回的值是一个int
可以这样做个测试:
printf("%d",sizeof(a<<8);
16位编译器会输出2
32位编译器会输出4

回答(2):

如果a是字符型,左移8位倒是真的变成0了,但是一般情况下字符型参与运行自动用整数来进行,所以这个问题就不存在了,不过最好这样:
(unsigned int)a << 8 | b