你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

这种【合并两个8位数据】的方式是否正确?

[复制链接]
NNXia 提问时间:2017-5-23 18:32 /
阅读主题, 点击返回1楼
收藏 评论30 发布时间:2017-5-23 18:32
30个回答
潇潇雨歇pku 回答时间:2017-5-24 09:06:24
这种还是以事实为准,写代码跑一遍是最简单的获取答案的途径
hjl2832 回答时间:2017-5-24 09:08:04
这样写有什么问题?BUFF[0]左移8位后等于16位,右边8位会自动补0,这时再与buff[1]相或,得到一个完整的16位数。请注意,这里的前提是有(int16_t)强制数据类型转换,意思就是已经提前告诉编译器这个数据是要作为16位数据处理的,所以保留的数据也是16位数。
风子 回答时间:2017-5-24 09:10:34
并没有问题,自己分析一下楼上的汇编就懂了
回答时间:2017-5-24 09:13:15
8位数据左移8位后溢出部分丢失,需要进行先强制定义再进行移位。
す疯Ⅱ恒す 回答时间:2017-5-24 10:41:02
看汇编代码吧,移位的数据并没有保存在原来的数组,保存在RO R1寄存器上,所以并没有任何问题。
开心/xin男孩 回答时间:2017-5-24 11:49:36
看看,帮顶
NNXia 回答时间:2017-5-24 13:16:44
斜阳__ 发表于 2017-5-24 08:12
stm32的寄存器是32位的

也就是说,8位数据左移只要不超过24位,数据就不会丢失?还在那个寄存器里?
NNXia 回答时间:2017-5-24 13:19:46
斜阳__ 发表于 2017-5-24 08:12
stm32的寄存器是32位的

8为数据左移之后时候否丢失是跟运行这行代码的机器有关的吧?
比如在51单片机中,8位数据左移8位之后就丢了?
斜阳__ 回答时间:2017-5-24 15:11:56
NNXia 发表于 2017-5-24 13:19
8为数据左移之后时候否丢失是跟运行这行代码的机器有关的吧?
比如在51单片机中,8位数据左移8位之后就丢 ...

51是8位单片机
NNXia 回答时间:2017-5-24 15:40:34

明白了,在32上运行这个代码是没问题的,但这行代码对数据来说是不安全的,移植到其他单片机上有可能不能用。

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版