这种还是以事实为准,写代码跑一遍是最简单的获取答案的途径
这样写有什么问题?BUFF左移8位后等于16位,右边8位会自动补0,这时再与buff相或,得到一个完整的16位数。请注意,这里的前提是有(int16_t)强制数据类型转换,意思就是已经提前告诉编译器这个数据是要作为16位数据处理的,所以保留的数据也是16位数。
并没有问题,自己分析一下楼上的汇编就懂了
8位数据左移8位后溢出部分丢失,需要进行先强制定义再进行移位。
看汇编代码吧,移位的数据并没有保存在原来的数组,保存在RO R1寄存器上,所以并没有任何问题。
看看,帮顶
斜阳__ 发表于 2017-5-24 08:12
stm32的寄存器是32位的
也就是说,8位数据左移只要不超过24位,数据就不会丢失?还在那个寄存器里?
斜阳__ 发表于 2017-5-24 08:12
stm32的寄存器是32位的
8为数据左移之后时候否丢失是跟运行这行代码的机器有关的吧?
比如在51单片机中,8位数据左移8位之后就丢了?
NNXia 发表于 2017-5-24 13:19
8为数据左移之后时候否丢失是跟运行这行代码的机器有关的吧?
比如在51单片机中,8位数据左移8位之后就丢 ...
51是8位单片机
斜阳__ 发表于 2017-5-24 15:11
51是8位单片机
明白了,在32上运行这个代码是没问题的,但这行代码对数据来说是不安全的,移植到其他单片机上有可能不能用。