霸气侧漏 发表于 2014-5-7 13:44:41

uchar型数据比较(已解决)

本帖最后由 FSL_TICS_ZJJ 于 2014-6-4 13:06 编辑

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

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

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

FSL_TICS_ZJJ 发表于 2014-5-7 13:50:45

那么你就不要一上来就做差,可以先判断大小,如果A>B,然后再减一下看看差值是哪个档的。

Ω囿圉Ω 发表于 2014-5-7 14:16:36

if(A > B)A-B
不太明白楼主的要求

霸气侧漏 发表于 2014-5-7 14:20:31

我现在是这样写的,不知道有什么好的方法没
                if( 实际压力 < 预设压力 )
                                {
                                          if( (预设压力 - 实际压力 ) >= 50 )      ;
                                                elseif( (预设压力 - 实际压力 ) >= 40 );
                                                elseif( (预设压力 - 实际压力 ) >= 30 );
                                                elseif( (预设压力 - 实际压力 ) >= 20 );
                                                elseif( (预设压力 - 实际压力 ) >= 10 );
                                                elseif( (预设压力 - 实际压力 ) >= 5 )   ;
                                }                                               
                if( 实际压力 < 预设压力 )       ;

glacier1 发表于 2014-5-7 14:22:15

不超过128的话直接用有符号型不是更好么

wangpengcheng 发表于 2014-5-7 14:23:28

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

霸气侧漏 发表于 2014-5-7 14:29:16

glacier1 发表于 2014-5-7 14:22
不超过128的话直接用有符号型不是更好么

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

霸气侧漏 发表于 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了!》《》里的内容有点不明,用指针数组作何用处呢

霸气侧漏 发表于 2014-5-7 14:32:29

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

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

wangpengcheng 发表于 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 = {Fun0, Fun10, Fun20, Fun30, Fun40, Fun50};

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

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

就可以了!

wangpengcheng 发表于 2014-5-7 14:45:07

关键不要用10进制去做,尽量用16进制去做,这样可以用移位来做除法

songjie 发表于 2014-6-30 20:39:04

不明白在说什么

步之道 发表于 2014-7-1 09:35:36

同样不明白的路过,直接a判断(A-B)>20/30/40/50?
页: [1]
查看完整版本: uchar型数据比较(已解决)