5375|11

73

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

奇怪的与负数比较问题 [复制链接]

在程序开发过程中发现一个问题,我定义了一个常量,是负数:
#define        SENSOR_VAL_INVALID        -100
用于表示获取的温度传感器值是无效的。
做测试如下:
        int8_t n = 49;
        int8_t temp = SENSOR_VAL_INVALID;
        if (n < temp)
        {
                n = 0;
        }

如果n是负数,则能正确比较是小于temp的。如果n是正数,则判断错误,执行了n=0语句。
有没有高人解释一下?其中int8_t是signed char类型。

最新回复

int8_t 的定义代码怎么会有问题? 就是 #define int8_t signed char而已 目前猜测可能是COSMIC编译器有关。在自己的条件上添加了变量是否小于0的判断与上之前的条件,临时对付一下。等项目作为,好好分析分析。希望有知道的高手能指点一二。谢谢!  详情 回复 发表于 2010-5-13 15:53
点赞 关注

回复
举报

71

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
#define SENSOR_VAL_INVALID (int8_t)(-100)

试试
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
首先你注意signed char的范转是-128到127,
估计是按补码计算了吧。。。。
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

4
 
不用temp直接比较结果怎么样?
为什么要用temp赋值一次~!
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

5
 
谢谢楼上的回复,这些办法我都试过了。包括添加(int8_t),包括不使用temp变量,直接比较,也包括在SENSOR_VAL_INVALID前面加上(int8_t)都是这样,我的数定义的是-100,根本不到(int8_t)的下限啊,何况负数比较的时候是没有问题的,只有在正数与-100比较时会结果有问题。我用的是STVD4.1.5版本。
 
 
 

回复

56

帖子

0

TA的资源

一粒金砂(初级)

6
 
如果n取大于-100的负数时,结果也是对的,也就是只要n小于0,就能正确比较结果。在大于0的数时就出现错误判断,我怀疑是将SENSOR_VAL_INVALID当成正数来判断了,可是就算显式将SENSOR_VAL_INVALID转换为int8_t也会有问题。
对了用的是ST7的芯片,STVD4.1.5开发环境,COSMIC编译工具。
 
 
 

回复

85

帖子

0

TA的资源

一粒金砂(初级)

7
 
刚才继续调试了一下,发现就算如此定义,也是错误:
        int8_t n = -100;
       
        int8_t temp = 49;
       
        if (temp < n)
        {
                return;
        }
也执行到了return。难道与函数有关系?
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

8
 
个人感觉到很奇怪,是不是编译的问题?到VC下试试结果如何,,,,
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

9
 

int8_t 的定义代码存在问题
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

10
 
程序没有问题啊,很神奇,难道是编译器问题,或者int8_t定义有问题?
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

11
 
单步调试看看
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(中级)

12
 
int8_t 的定义代码怎么会有问题?
就是
#define int8_t signed char而已
目前猜测可能是COSMIC编译器有关。在自己的条件上添加了变量是否小于0的判断与上之前的条件,临时对付一下。等项目作为,好好分析分析。希望有知道的高手能指点一二。谢谢!
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表