发新帖我要提问
12
返回列表
打印
[51单片机]

9句短话,藏大秘密

[复制链接]
楼主: hetiandemeng017
手机看帖
扫描二维码
随时随地手机跟帖
21
shauew| | 2015-11-9 10:22 | 只看该作者 回帖奖励 |倒序浏览
one more time
Rev[0]+ Rev[1]+ Rev[2]+ Rev[3] = 0x108
由于你定义了uchar 所以溢出部分归零
结果就是0x08
所以
i=Rev[0]+ Rev[1]+ Rev[2]+ Rev[3]              =>     i=0x08
但是
if(i==Rev[0]+ Rev[1]+ Rev[2]+ Rev[3])        =>    if(0x08==0x108)
不满足条件,
结果 i=0xaa就不会执行
最后 i=0x08

这次应该不会错了

使用特权

评论回复
评分
参与人数 1威望 +3 收起 理由
hetiandemeng017 + 3 很给力!
22
popeye021| | 2015-11-9 10:29 | 只看该作者
xygyszb 发表于 2015-11-9 10:18
那么Rev[0]+Rev[1]+Rev[2]+Rev[3]的值是多少呢?

上面已经把汇编代码贴出来了,很明显了吧

使用特权

评论回复
23
xygyszb| | 2015-11-9 13:18 | 只看该作者
popeye021 发表于 2015-11-9 10:29
上面已经把汇编代码贴出来了,很明显了吧

恩,得看那个汇编的。

使用特权

评论回复
24
shauew| | 2015-11-9 16:23 | 只看该作者
xygyszb 发表于 2015-11-9 10:18
那么Rev[0]+Rev[1]+Rev[2]+Rev[3]的值是多少呢?

0x108

使用特权

评论回复
25
hgjinwei| | 2015-11-9 17:40 | 只看该作者
这个问题是各个编译器自行发挥的问题,没有标准答案。

使用特权

评论回复
评分
参与人数 1威望 +3 收起 理由
hetiandemeng017 + 3 很给力!
26
pkuzhx| | 2015-11-9 18:58 | 只看该作者
看这标题还以为要九*评xxx呢

使用特权

评论回复
27
Alexfang1325| | 2015-11-9 19:21 | 只看该作者
大忽悠啊,基本概念

使用特权

评论回复
28
lvyunhua| | 2015-11-9 22:16 | 只看该作者
是啊,基本 概念!

使用特权

评论回复
29
hetiandemeng017|  楼主 | 2015-11-10 08:19 | 只看该作者
散了吧。我已经知道了!21楼谢谢了。Rev[0]+ Rev[1]+ Rev[2]+ Rev[3]的uchar结果会保存在一个更大的存储空间中,暂时不会溢出。楼主就是这里没搞懂!散分了

使用特权

评论回复
30
xygyszb| | 2015-11-10 09:06 | 只看该作者
hetiandemeng017 发表于 2015-11-10 08:19
散了吧。我已经知道了!21楼谢谢了。Rev[0]+ Rev[1]+ Rev[2]+ Rev[3]的uchar结果会保存在一个更大的存储空 ...

使用特权

评论回复
31
ywlzh| | 2015-11-10 11:15 | 只看该作者
xygyszb 发表于 2015-11-9 10:18
那么Rev[0]+Rev[1]+Rev[2]+Rev[3]的值是多少呢?

8 呀 呀呀呀,if只是判断没有赋值

使用特权

评论回复
32
funior| | 2015-11-10 13:25 | 只看该作者
这个很好理解吧你改成if(i==(uchar)(Rev[0]+Rev[1]+Rev[2]+Rev[3])),就该得到预期结果了。开始对i赋值也相当于uchar i=Rev[0]+Rev[1]+Rev[2]+Rev[3]

使用特权

评论回复
评论
hetiandemeng017 2015-11-10 21:37 回复TA
不能再赞成了! 
评分
参与人数 1威望 +3 收起 理由
hetiandemeng017 + 3 很给力!
33
zhuyjgh| | 2015-11-10 13:37 | 只看该作者
这个要看编译器给不给你扩展成16bit,扩展算你幸运,不扩展它也没错,,
所以这种 (uchar)+(uchar)的运算本身是很危险的!

使用特权

评论回复
34
hetiandemeng017|  楼主 | 2015-11-10 21:37 | 只看该作者
zhuyjgh 发表于 2015-11-10 13:37
这个要看编译器给不给你扩展成16bit,扩展算你幸运,不扩展它也没错,,
所以这种 (uchar)+(uchar)的运算本 ...

你不知道我要拿来干嘛,告诉你吧,我拿来校验和用的,无所谓溢出与否,只要主从机算法一样就可以了。哈哈

使用特权

评论回复
35
舍恩| | 2015-11-11 07:41 | 只看该作者
学到了 以前都没注意..

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则