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");
        }
    }

    此时的汇编语句:

      

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

  • 相关阅读:
    11.11 开课二个月零七天(ajax和bootstrp做弹窗)
    11.10 (下午)开课二个月零六天(ajax验证用户名,ajax调数据库)
    获取当月时间段。
    JavaScript prototype 使用介绍
    JavaScript arguments对象
    JS,DOM对象新知识点整理
    JS清除选择的内容
    限制显示内容,超出用省略号代替的方法
    封装php连接数据库返回方法
    div跟随鼠标移动代码
  • 原文地址:https://www.cnblogs.com/codexlx/p/13414907.html
Copyright © 2011-2022 走看看