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那么就溢出了 ,
还有各位能不能把你们在这里做的比较好的处理方法分享出来呗,
比如 字符转换、不同数据间的比较等等。大家都分享下呗嘿嘿 那么你就不要一上来就做差,可以先判断大小,如果A>B,然后再减一下看看差值是哪个档的。 if(A > B)A-B
不太明白楼主的要求 我现在是这样写的,不知道有什么好的方法没
if( 实际压力 < 预设压力 )
{
if( (预设压力 - 实际压力 ) >= 50 ) ;
elseif( (预设压力 - 实际压力 ) >= 40 );
elseif( (预设压力 - 实际压力 ) >= 30 );
elseif( (预设压力 - 实际压力 ) >= 20 );
elseif( (预设压力 - 实际压力 ) >= 10 );
elseif( (预设压力 - 实际压力 ) >= 5 ) ;
}
if( 实际压力 < 预设压力 ) ;
不超过128的话直接用有符号型不是更好么 把无符号的8位改有有符号的16位,这样能排除A小于B的情况,然后把你的参数对应不要用10、20、30、40、50,想办法对应到0x10、0x20、0x30、0x40、0x50,这样的话直接把低四位清除,就可以得出一个顺序的序列号,然后用指针数组就OK了! glacier1 发表于 2014-5-7 14:22
不超过128的话直接用有符号型不是更好么
你的这个方法我也想过,只是压力值比较大,当然数据大的话用int型就搞定,但是我想要的是高效的处理数据。 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了!》《》里的内容有点不明,用指针数组作何用处呢 FSL_TICS_ZJJ 发表于 2014-5-7 13:50
那么你就不要一上来就做差,可以先判断大小,如果A>B,然后再减一下看看差值是哪个档的。 ...
我之前想的就是这个方法,不知道有没有官方的函数,直接调用就行,比如printf函数等等 本帖最后由 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();
就可以了! 关键不要用10进制去做,尽量用16进制去做,这样可以用移位来做除法 不明白在说什么 同样不明白的路过,直接a判断(A-B)>20/30/40/50?
页:
[1]