源码如下:
#include <stdio.h>
 
void main(){
    int flag;
    flag=1;
    switch (flag){
        case 1:
            printf("1\n");
            break;
        case 2:
            printf("2\n");
            break;
        case 3:
            printf("3\n");
            break;
        case 4:
            printf("4\n");
            break;
        case 5:
            printf("5\n");
            break;
        default:
            printf("%d\n",flag);
    }
}
  在int flag;处下断点,调试执行。如下图。
  分析汇编代码,有两行跳转代码,分析逻辑如下:

  上图很清晰了,当flag《=4时,最终跳转到的地址是连续的,间隔为4,就是int型的大小,猜测switch的选项值放在连续地址块。如下图。

  当flag》=4时,跳转到default分支。如下图。

  由此可知此switch不需要比较选项值(flag)具体是啥,它将flag和下标关联,从而直接访问相应地址的值作为反馈,速度很快,愉快地结束。
 

从汇编层面解释switch语句判断快速的原因的更多相关文章

  1. switch语句判断学生成绩

    下面通过判断学生成绩来展示switch语句的使用. Q:判断学生成绩的等级,90-100分为A级,80-89为B级,70-79为C级,60-69为D级,60以下不及格. package main im ...

  2. PHP Switch 语句判断成绩

    初入PHP,就想简单的利用switch语句写一个关于成绩等级的判断,整个过程分为两部分一是前端数据,二是后台的计算. [HTML代码] <!-- * * * @Author: wyy * @Da ...

  3. 用switch语句判断月份,打印出当前月份所在的季节

    var today=new Date(); var abc=today.getMonth(); switch (abc) { case 0: case 1: case 2: document.writ ...

  4. Java学习之分支结构---判断语句:if语句和switch语句

    一个if语句包含一个布尔表达式和一条或多条语句,if 语句的用语法如下:if 语句 if(布尔表达式) { //如果布尔表达式为true将执行的语句 },如果布尔表达式的值为 true,则执行 if ...

  5. 7.21.02 switch语句

    switch语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支. 语法 switch语法格式如下: switch(expression) { case value : //语句 break ...

  6. C#中一种替换switch语句更优雅的写法

    今天在项目中遇到了使用switch语句判断条件,但问题是条件比较多,大概有几十个条件,满屏幕的case判断,是否有更优雅的写法替代switch语句呢? 假设有这样的一个场景:商场经常会根据情况采取不同 ...

  7. 多路开关模式的switch语句

    在实例10中,将break语句去掉之后,会将符合检验条件后的所有语句都输出.利用这个特点,可以设计多路开关模式的switch语句,例如:在平年一年12个月,1.3.5.7.8.10.12月是31天,4 ...

  8. if判断,switch语句

    if ; else if; else; 判断操作: 格式示例: public class scanner { public static void main(String[] args){ int a ...

  9. 利用switch语句进行多选一判断。

    <!doctype html> <meta http-equiv="content-type" content="text/html" cha ...

随机推荐

  1. BEAM188和LINK180简单实例

    简介 一开始想做一个绳索单元悬挂重物的仿真,其实想法很简单,但是在实现过程中却出现了很大的问题,纠结了很久,初步归结为:绳索单元在垂直其单元方向上受力,会导致其产生很大的变形,从而导致其不收敛.因此专 ...

  2. 100道JS构造函数面试题

    1. var User = { count: 1, getCount: function () { return this.count; } }; console.log(User.getCount( ...

  3. Java面向对象 第4节 类的多态性

    一.多态的概念 在面向对象语言中,多态是指在一棵继承树中的类中可以有多个同名但不同方法体及不同形参的方法.通常有两种途径实现多态:方法的重载和覆盖. 多态性允许以统一的风格处理已存在的变量及相关的类. ...

  4. 让所有浏览器支持HTML5 video视频标签

    HTML5究竟需要多少种视频编码格式 当前,video 元素支持三种视频格式:Ogg = 带有 Theora 视频编码和 Vorbis 音频编码的 Ogg 文件MPEG4 = 带有 H.264 视频编 ...

  5. Linux之find

    命令功能: find命令是用来在给定的目录下查找符合给定条件的文件.它需要从磁盘中查找,效率低,whereis和locate是基于缓存中数据库查找,效率很高,但是一些新建的文件可能未加入到数据库中,使 ...

  6. <realsense D400>同步采集深度图和彩色图

    利用深度相机采集深度图和彩色图会面临一个问题,如何实现同步采集数据? 以下是我搜集到的两点方法: 1)高翔博士提到他的orbslam2教程有这么一步工作,具体目录为 example/RGBD/. (等 ...

  7. phpcms基础循环

    lists循环{pc:content action="lists" catid="2" order="id DESC" num=" ...

  8. [TFS教程]TFS: Get Command

    Get Command Visual Studio 2012   Gets (downloads) either the latest version or a specified version o ...

  9. Java中产生随机数的两个方法

    Java中产生随机数的两个方法 一.利用random方法来生成Java随机数. 在Java语言中生成Java随机数相对来说比较简单,因为有一个现成的方法可以使用.在Math类中,Java语言提供了一个 ...

  10. centos 支持安装libsodium

    yum install epel-release -y yum install libsodium -y 然后没了.