char型变量左移8位赋值给int型变量的问题

unsigned int a; unsigned char str1,str2; a=(str1<<8)|(str2&0xff); 已经验证过结果是str1变成了a的高字节,str2变成了a的低字节。但是str1是char型的,为什么str1<<8不会变成0呢???

推荐答案:

ANSI C 中的整型提升(char convert to int) 隐式执行的。还有像下面“辅助答案”所说的那样,ARM编译器会把局部变量分配给内部寄存器,每个变量占一个32位的寄存器。

辅助答案:

因为char其实是按int存的
char其实存的是整数
计算机中变量的首地址都是按4字节(32位机器)或者8字节(64位机器)对齐的。单个char变量还是占了一个整数的内存,存的也是整数

© 版权声明
THE END
喜欢就支持一下吧,技术咨询可以联系QQ407933975
点赞0
分享
评论 抢沙发
CPPKU的头像-cppku-C++库

昵称

取消
昵称表情代码图片