求教if对多种状态判断语句改switch语句问题?

2019-07-20 10:41发布

我有一个if语句,来判断一个变量在不同大小范围下执行不同操作,感觉if语句逐条判断效率低,能不能,改成switch语句?要怎么改呢?
              if(bit_counter<9)
                         {
                                bit_set(&DCC_addr,9-bit_counter,data);
                         }
                         if(bit_counter>9&&bit_counter<18)
                         {
                         bit_set(&D1,18-bit_counter,data);}
        if(bit_counter==18&&data==1)
                                {
                                        DCC_byte_size=2;
                                        dcc_cmd_refresh_flag=1;
                                        data_flag=0;
                                        bit_counter=0;
                                }
                                if(bit_counter>18&&bit_counter<27)
                         {bit_set(&D2,27-bit_counter,data);}
                         if(bit_counter==27&&data==1)
                                 {
                                        DCC_byte_size=3;
                                        dcc_cmd_refresh_flag=1;
                                        data_flag=0;
                                        bit_counter=0;
                                       
//                                        HAL_UART_Transmit_IT(&huart1,&D2,1);
                                }
                                if(bit_counter>27&&bit_counter<36)
                         {bit_set(&D3,36-bit_counter,data);}
                                 if(bit_counter==36&&data==1)
                                 {
                                        DCC_byte_size=4;
                                        dcc_cmd_refresh_flag=1;
                                        data_flag=0;
                                        bit_counter=0;
                                }
                                if(bit_counter>36&&bit_counter<45)
                         {bit_set(&D4,45-bit_counter,data);}
                                         if(bit_counter==45&&data==1)
                                 {

                                        DCC_byte_size=5;
         dcc_cmd_refresh_flag=1;
                                        data_flag=0;
                                        bit_counter=0;
                                }
                                if(bit_counter>45&&bit_counter<54)
                         {bit_set(&D5,54-bit_counter,data);}
                                 if(bit_counter==54&&data==1)
                                 {
                                       
                                        DCC_byte_size=6;
                                        dcc_cmd_refresh_flag=1;
                                        data_flag=0;
                                        bit_counter=0;
                                }               

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
DreamWaterPro
1楼-- · 2019-07-20 14:46
对于你这个程序。。。我觉得用if-else对效率更高。

不是说switch效率就一定比if-else高的。

如果要硬改成switch,你需要设计出一个数学上的分段常值函数,把变量的不同取值范围映射成一个或多个数值,这样才能应用switch。

例如把百分制成绩转化为ABCDE,就可以把百分制成绩用整数除法除以10,case 10 case 9是A ,case 8是B,case 7 是C,case 6是D,case 5 case 4 case 3 case 2 case 1 case 0是E。
操作系统
2楼-- · 2019-07-20 14:51
芯片跑得N快快了.不怕这个.switch是给程序员看的.
super910906
3楼-- · 2019-07-20 16:07
 精彩回答 2  元偷偷看……
jermy_z
4楼-- · 2019-07-20 17:34
switch是明确状态的,看你这逻辑,switch并不完美匹配
psychoo
5楼-- · 2019-07-20 21:26
加else不就不会重复判断了么?
操作系统
6楼-- · 2019-07-20 23:45
 精彩回答 2  元偷偷看……

一周热门 更多>