最新消息:

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

零散记录 CPPKU 44浏览 0评论

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变量还是占了一个整数的内存,存的也是整数

转载请注明:cppku-C++库 » char型变量左移8位赋值给int型变量的问题

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址