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

这种【合并两个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管理
行使您的权利
官方最新发布
13245底部标题123相同标题
12底部标题123相同标题
33333底部标题123相同序号
3435底部标题-无链接
关注我们
st-img 微信公众号
st-img 手机版