你的浏览器版本过低,可能导致网站不能正常访问!为了你能正常使用网站功能,请使用这些浏览器。
斜阳__ 发表于 2017-5-24 08:12 stm32的寄存器是32位的
NNXia 发表于 2017-5-24 13:19 8为数据左移之后时候否丢失是跟运行这行代码的机器有关的吧? 比如在51单片机中,8位数据左移8位之后就丢 ...
斜阳__ 发表于 2017-5-24 15:11 51是8位单片机
す疯Ⅱ恒す 发表于 2017-5-24 10:41 看汇编代码吧,移位的数据并没有保存在原来的数组,保存在RO R1寄存器上,所以并没有任何问题。 ...
hjl2832 发表于 2017-5-24 09:08 这样写有什么问题?BUFF[0]左移8位后等于16位,右边8位会自动补0,这时再与buff[1]相或,得到一个完整的16 ...
潇潇雨歇pku 发表于 2017-5-24 09:06 这种还是以事实为准,写代码跑一遍是最简单的获取答案的途径
NNXia 发表于 2017-5-23 22:33 看到4楼那位大哥的调试图了吗?请问为什么会出现那种情况?
蓝凌风 发表于 2017-5-24 16:48 没问题的,buf[0]只是内存上的变量,要进行其它操作,比如移位,相加,相减等都是先要放到内核寄存器才能 ...
也就是说,8位数据左移只要不超过24位,数据就不会丢失?还在那个寄存器里?
8为数据左移之后时候否丢失是跟运行这行代码的机器有关的吧?
比如在51单片机中,8位数据左移8位之后就丢了?
51是8位单片机
明白了,在32上运行这个代码是没问题的,但这行代码对数据来说是不安全的,移植到其他单片机上有可能不能用。
恩恩,是的
如果在51单片机里,BUFF[0]左移8位后还等于16位吗?
事实是对32单片机来说,数据不会丢失
没问题的,buf[0]只是内存上的变量,要进行其它操作,比如移位,相加,相减等都是先要放到内核寄存器才能操作,内核寄存器都是32位的,不会有问题。这种方法不太好,用指针的方法会好很多
恩恩,是的