打印

单片机C语言_无符号数据比较时候的注意事项分享

[复制链接]
1221|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
woshigeshuai|  楼主 | 2021-4-9 09:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 woshigeshuai 于 2021-4-9 09:59 编辑

  unsigned char dataTest;
  dataTest=3;
    if((u8)(dataTest-0x40) < 0x31)   //
    {
      dataTest=0;  //
    }
    else
      dataTest=1; 正确到这里
// --------------------------------------------------------------
  unsigned char dataTest;
  dataTest=3;
  
     
    if((dataTest-0x40) < 0x31)   //
    {
      dataTest=0;  // 错误到这里  dataTest-0x40=0XFFC3 ,会认定是负数
    }
    else
      dataTest=1;

使用的是IAR MSP430 开发环境, 我是一名合肥的单片机开发者,有兴趣加个好友,交流交流

使用特权

评论回复
评论
zyj9490 2021-4-9 10:36 回复TA
如果IF(..<0X71) { } ELSE { },什么事都没有。要专注于过程及中间变量。 
zyj9490 2021-4-9 10:34 回复TA
这叫做中间值溢出,错误的。不能差值比较,应是正值比较,或者数据类型为CHAR. 

相关帖子

沙发
woshigeshuai|  楼主 | 2021-4-9 09:38 | 只看该作者
本帖最后由 woshigeshuai 于 2021-4-9 10:00 编辑

说错了,删除了

使用特权

评论回复
板凳
madboy21| | 2021-4-9 10:56 | 只看该作者
uchar a,b,c;
a = 1;b=2;
c = a - b;
c = ?
不同的开发环境有不一样的结果,有的是0,有的是0xFE.
同样的a--;a--; 有的编译器是0,有的是0xFE.

使用特权

评论回复
地板
madboy21| | 2021-4-9 10:59 | 只看该作者
现在我是不管什么单片机,什么开发环境,都先比较再计算:
if(a > b)c = a - b;//防止想不到的问题出现。

使用特权

评论回复
5
coody| | 2021-4-9 18:11 | 只看该作者
无符号数怎么会有负数的问题???

使用特权

评论回复
6
woshigeshuai|  楼主 | 2021-4-11 17:12 | 只看该作者
coody 发表于 2021-4-9 18:11
无符号数怎么会有负数的问题???

你下载IAR 把我的代码放上去 看一看就知道了

使用特权

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

本版积分规则

29

主题

119

帖子

2

粉丝