繁体   English   中英

8位MCU中的32位可变移位

[英]32-Bit variable shifting in 8-bit MCU

我正在使用32位变量将4个8位值存储为一个32位值。

32_bit_buf[0]= cmd[9]<<16 | cmd[10]<<8| cmd[11] <<0;

cmd是带数据的无符号字符类型

cmd [9]=AA
cmd[10]=BB
cmd[11]=CC

但是,当打印32位变量时,我得到0xFFFFBBCC

架构-8位AVR Xmega

语言C

谁能找出我要去的地方。

您的架构使用16bit int ,因此未定义移位16位。 将您的cmd[9]转换为更广泛的类型,例如(uint32_t)cmd[9] << 16应该可以工作。

您还应该将此强制转换应用于其他组件:将cmd[10]移位8位时,您可以移入16位带符号的 int的符号位,操作数将自动提升为该值,从而导致更多奇怪/不确定的行为。

那是因为您试图将值移入8位容器(无符号字符)并获得32位。 8位值将扩展为int (16位),但这还不够。 您可以通过多种方式解决此问题,例如,其中一种方法就是将目标变量用作累加器。

32_bit_buf[0] = cmd[9];
32_bit_buf[0] <<= 8;
32_bit_buf[0] |= cmd[10];
32_bit_buf[0] <<= 8;
32_bit_buf[0] |= cmd[11];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM