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

[复制链接]
 楼主| 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 开发环境, 我是一名合肥的单片机开发者,有兴趣加个好友,交流交流

评论

如果IF(..<0X71) { } ELSE { },什么事都没有。要专注于过程及中间变量。  发表于 2021-4-9 10:36
这叫做中间值溢出,错误的。不能差值比较,应是正值比较,或者数据类型为CHAR.  发表于 2021-4-9 10:34
 楼主| 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;//防止想不到的问题出现。
coody 发表于 2021-4-9 18:11 | 显示全部楼层
无符号数怎么会有负数的问题???
 楼主| woshigeshuai 发表于 2021-4-11 17:12 | 显示全部楼层
coody 发表于 2021-4-9 18:11
无符号数怎么会有负数的问题???

你下载IAR 把我的代码放上去 看一看就知道了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

29

主题

119

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部