zoukankan      html  css  js  c++  java
  • 一些小技巧

    swap函数的几种写法。
    其中,最快的是赋值交换原因分析

    gcc开启O2优化后,三个函数的汇编代码一样。是的,除了第一行的文件名,一模一样。
    附代码

    void swap1(int *a, int *b) {     //赋值交换
        int temp;
        temp = *a;
        *a = *b;
        *b = temp;
    }
    void swap2(int *a, int *b) {    //加减法(可能导致int溢出),乘除法(溢出,除数不能为零)
        *a = *a + *b;
        *b = *a - *b;
        *a = *a - *b;
    }
    void swap3(int *a, int *b) {    //位运算交换(两数不能相同)
        *a=*a ^ *b;
        *b=*a ^ *b;
        *a=*a ^ *b;
    }
    

    三目运算符与if else比较。
    编译器不做任何优化时,三目运算符更快。
    但实际上编译器会进行优化,导致两者汇编代码一样。


    判断一个数m是否为2的若干次幂。
    printf("%s ",m & (m - 1) ? "false" : "true");


    查看C标准

    gcc -E -dM - </dev/null | grep "STDC_VERSION"
    
    cout<<__cplusplus;
    

    使用表驱动法代替过多的if/else、switch

  • 相关阅读:
    MySql
    Zookeeper
    Kafka
    Mybatis
    Spring/Spring MVC
    Spring Boot/Spring Cloud
    网络
    设计模式
    Strassen algorithm(O(n^lg7))
    dynamic programming:find max subarray
  • 原文地址:https://www.cnblogs.com/srczhang/p/11645725.html
Copyright © 2011-2022 走看看