立即注册
查看: 2145|回复: 5

keil中编译的单片机 遇到一个问题

发表于 2015-11-12 10:53:57 | 显示全部楼层 |阅读模式 来自 广东省深圳市罗湖区


KEIL中编译的单片机 遇到一条坎,求哥哥们扶一把!
废话少说,上着9句代码
#define  uchar unsigned char
void main()
{
        uchar i=0;
        uchar Rev[4];
          Rev[0]=0x00;
        Rev[1]=0x00;
        Rev[2]=0x09;
        Rev[3]=0xff;
        i=Rev[0]+ Rev[1]+ Rev[2]+ Rev[3];//0x08
        if(i==Rev[0]+ Rev[1]+ Rev[2]+ Rev[3])i=0xaa;
        while(1);
}
请问最后i是0xaa还是0x08?
为什么?
我知道答案,我不知道为什么。谢谢!

已实名认证
发表于 2015-11-19 11:51:51 | 显示全部楼层 来自 北京市
应该是ox08,有进位溢出,所以不相等。
发表于 2015-11-20 10:56:54 | 显示全部楼层 来自 广东省深圳市罗湖区
求解为什么是ox08?
发表于 2015-11-20 11:44:17 | 显示全部楼层 来自 广东省深圳市罗湖区
Rev[0]+ Rev[1]+ Rev[2]+ Rev[3]的值超过了uchar的范围,i是uchar类型,保存不了那么大的数,只保留Rev[0]+ Rev[1]+ Rev[2]+ Rev[3]的值的低8位。所以i!=Rev[0]+ Rev[1]+ Rev[2]+ Rev[3]
谢谢大师  详情 回复
发表于 2015-11-21 10:08
 楼主| 发表于 2015-11-21 10:08:54 | 显示全部楼层 来自 广东省深圳市罗湖区
喵喵 发表于 2015-11-20 11:44
Rev[0]+ Rev[1]+ Rev[2]+ Rev[3]的值超过了uchar的范围,i是uchar类型,保存不了那么大的数,只保留Rev[0]+ ...

谢谢大师
已绑定手机
发表于 2021-6-11 08:19:48 | 显示全部楼层 来自 湖北省武汉市
路过,学习了。刚学了几天的单片机。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

合作/建议

TEL: 19168984579

工作时间:
周一到周五 9:00-11:30 13:30-19:30
  • 扫一扫关注公众号
  • 扫一扫打开小程序
Copyright © 2013-2024 一牛网 版权所有 All Rights Reserved. 帮助中心|隐私声明|联系我们|手机版|粤ICP备13053961号|营业执照|EDI证
在本版发帖搜索
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表