源码如下:
#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. LiquiBase 学习

    preconditions mysql database is installed maven has been setted up properly add depedenceies apply p ...

  2. Struts2-052 RCE CVE-2017-9805

    从struts2的官网下载最后受影响的版本struts-2.5.12,地址: http://archive.apache.org/dist/struts/2.5.12/struts-2.5.12-ap ...

  3. psql的安装与数据库创建(ubuntu)

    来自阮一峰日志 http://www.ruanyifeng.com/blog/2013/12/getting_started_with_postgresql --------------------- ...

  4. CVE-2017-11882 POC 全版本通杀

    POC https://github.com/embedi/CVE-2017-11882

  5. 使用新标签兼容低版本IE

    HTML语义化 意义:根据内容的结构化(语义化),选择合适的标签,便于开发者阅读和写出更优雅的代码,同时让流浪器的爬虫和机器更好的解析. 尽可能少的使用无语义的标签 div 和 span 在语义不明显 ...

  6. 更多FMK 的还是看万一的吧

    http://www.cnblogs.com/del/category/323943.html 记录一下, 作为目录

  7. DotNetBar创建的Ribbon、标签式多文档界面

    1.创建一个form作为主窗体,继承自:DevComponents.DotNetBar.RibbonForm 设置属性:IsMdiContainer为true 2.创建一个form,作为子窗体,也继承 ...

  8. 20145319 《网络渗透》MS08_067安全漏洞

    20145319 <网络渗透>MS08_067安全漏洞 一 实验内容 了解掌握metasploit平台的一些基本操作,能学会利用已知信息完成简单的渗透操作 了解漏洞MS08_067的相关知 ...

  9. 二、CSS选择器

    1.CSS派生选择器 概念:通过依据元素在其位置的上下文关系来定义样式. 实例: <!--index.html--> <!DOCTYPE html> <html lang ...

  10. 204. jetcache:在Spring Boot中怎么玩?

      [视频&交流平台] àSpringBoot视频:http://t.cn/R3QepWG à SpringCloud视频:http://t.cn/R3QeRZc à Spring Boot源 ...