zoukankan      html  css  js  c++  java
  • C语言之switch语句与if...else..语句的比较及switch语句高效的原因

    1.switch语句与if...else...语句的区别:

    • switch语句只进行等值判断,而if...else可以进行区间判断
    • switch结构的执行效率远远高于if...else。在分支条件比较多的情况下这种趋势愈发明显

    2.switch语句高效的原因

      游戏中的快捷键常用switch语句实现功能

    对比if...else和switch语句:

    (1)一个简单的if...else...语句:

    #include<stdio.h>
    
    void main() {
        int x = 3;
        if (x == 1) {
            printf("x=1");
        }
        else if (x == 2) {
            printf("x=2");
        }
        else if (x == 3) {
            printf("x=3");
        }
        else {
            printf("xxx");
        }
    }

     对应的汇编指令:

      

     大致意思是每次判断,判断如果不符合就下次判断,否则执行对应的代码

    (4)switch语句

    #include<stdio.h>
    
    void main() {
        int x = 3;
        switch (x) {
        case 1:
            printf("x=1");
            break;
        case 2:
            printf("x=2");
            break;
        case 3:
            printf("x=3");
            break;
        default:
            printf("xxx");
        }
    }

     对应的汇编指令:

      

    switch语句会在case开始前进行x的判断,相等了就跳到对应的位置,否则就jmp到default的位置。

    这里看好像与if else 相比并没有什么优势。

    如果把switch语句的判断数加两个:

    #include<stdio.h>
    
    void main() {
        int x = 3;
        switch (x) {
        case 1:
            printf("x=1");
            break;
        case 2:
            printf("x=2");
            break;
        case 3:
            printf("x=3");
            break;
        case 4:
            printf("x=4");
            break;
        case 5:
            printf("x=5");
            break;
        default:
            printf("xxx");
        }
    }

    此时的汇编语句:

      

    条件多的时候就会通过生成一张表,这个表里面存储所有分支的函数地址,一次就可以跳到对应的地址,避免了不停的判断。

  • 相关阅读:
    设计模式~门面模式
    设计模式~享元模式
    设计模式~代理模式
    Java IO流:(六)节点流(文件流)之 FileWriter
    Java IO流:(五)节点流(文件流)之 FileReader
    Java IO流:(四)节点流(文件流)
    Java IO流:(三)IO流四大基类
    Java IO流:(二)IO流原理及流的分类
    Java IO流:(一)File 文件类
    每周总结
  • 原文地址:https://www.cnblogs.com/codexlx/p/13414907.html
Copyright © 2011-2022 走看看