搜索
bottom↓
回复: 12

uchar型数据比较(已解决)

[复制链接]

出0入0汤圆

发表于 2014-5-7 13:44:41 | 显示全部楼层 |阅读模式
本帖最后由 FSL_TICS_ZJJ 于 2014-6-4 13:06 编辑

我想比较2个uchar数据A(实际压力) B(预设压力)  当A的数字大于B数据10   20   30   40   50时这5种情况时,   谁有好的方法呢
如果仅仅做差比较的话   A  -——  B  那就有可能是  10 ——   160  那么就溢出了 ,

还有各位能不能把你们在这里做的比较好的处理方法分享出来呗,

比如 字符转换、不同数据间的比较等等。大家都分享下呗  嘿嘿

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2014-5-7 13:50:45 | 显示全部楼层
那么你就不要一上来就做差,可以先判断大小,如果A>B,然后再减一下看看差值是哪个档的。

出0入0汤圆

发表于 2014-5-7 14:16:36 | 显示全部楼层
if(A > B)A-B
不太明白楼主的要求

出0入0汤圆

 楼主| 发表于 2014-5-7 14:20:31 | 显示全部楼层
我现在是这样写的,不知道有什么好的方法没
                if( 实际压力 < 预设压力 )
                                {
                                          if( (预设压力 - 实际压力 ) >= 50 )        ;
                                                else  if( (预设压力 - 实际压力 ) >= 40 )  ;
                                                else  if( (预设压力 - 实际压力 ) >= 30 )  ;
                                                else  if( (预设压力 - 实际压力 ) >= 20 )  ;
                                                else  if( (预设压力 - 实际压力 ) >= 10 )  ;
                                                else  if( (预设压力 - 实际压力 ) >= 5 )   ;  
                                }                                               
                if( 实际压力 < 预设压力 )         ;

出0入0汤圆

发表于 2014-5-7 14:22:15 | 显示全部楼层
不超过128的话直接用有符号型不是更好么

出0入0汤圆

发表于 2014-5-7 14:23:28 | 显示全部楼层
把无符号的8位改有有符号的16位,这样能排除A小于B的情况,然后把你的参数对应不要用10、20、30、40、50,想办法对应到0x10、0x20、0x30、0x40、0x50,这样的话直接把低四位清除,就可以得出一个顺序的序列号,然后用指针数组就OK了!

出0入0汤圆

 楼主| 发表于 2014-5-7 14:29:16 | 显示全部楼层
glacier1 发表于 2014-5-7 14:22
不超过128的话直接用有符号型不是更好么

你的这个方法我也想过,  只是压力值比较大,  当然数据大的话用int型就搞定,但是我想要的是高效的处理数据。

出0入0汤圆

 楼主| 发表于 2014-5-7 14:31:00 | 显示全部楼层
wangpengcheng 发表于 2014-5-7 14:23
把无符号的8位改有有符号的16位,这样能排除A小于B的情况,然后把你的参数对应不要用10、20、30、40、50, ...

哥们 你的不大明白   《然后把你的参数对应不要用10、20、30、40、50,想办法对应到0x10、0x20、0x30、0x40、0x50,这样的话直接把低四位清除,就可以得出一个顺序的序列号,然后用指针数组就OK了!》  《》里的内容有点不明,用指针数组作何用处呢

出0入0汤圆

 楼主| 发表于 2014-5-7 14:32:29 | 显示全部楼层
FSL_TICS_ZJJ 发表于 2014-5-7 13:50
那么你就不要一上来就做差,可以先判断大小,如果A>B,然后再减一下看看差值是哪个档的。 ...

我之前想的就是这个方法,不知道有没有官方的函数,直接调用就行,比如printf函数等等

出0入0汤圆

发表于 2014-5-7 14:43:20 | 显示全部楼层
本帖最后由 wangpengcheng 于 2014-5-7 14:51 编辑
霸气侧漏 发表于 2014-5-7 14:31
哥们 你的不大明白   《然后把你的参数对应不要用10、20、30、40、50,想办法对应到0x10、0x20、0x30、0x ...


定义一个函数指针数组啊:
void Fun0(void)
{
        //此函数为空
}
void Fun10(void)
{
        //大于10的时候的处理
}
void Fun20(void)
{
        //大于20的时候的处理
}
......................


typedef void (*Fun)(void);

Fun Option[6] = {Fun0, Fun10, Fun20, Fun30, Fun40, Fun50};

如果你把你的参数调整到了0x10\0x20\0x30\0x40\0x50,那么你就可以用下面的方法:

int FunIndex =(( (A-B) > 0) &&( (A-B) < 60)) ? (A-B) >> 4 : 0;
Option[FunIndex]();

就可以了!

出0入0汤圆

发表于 2014-5-7 14:45:07 | 显示全部楼层
关键不要用10进制去做,尽量用16进制去做,这样可以用移位来做除法

出0入0汤圆

发表于 2014-6-30 20:39:04 | 显示全部楼层
不明白在说什么

出0入0汤圆

发表于 2014-7-1 09:35:36 | 显示全部楼层
同样不明白的路过,直接a判断(A-B)>20/30/40/50?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-19 08:00

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表