一些小技巧

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\n",m & (m - 1) ? "false" : "true");


查看C标准

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

cout<<__cplusplus;

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

posted @ 2019-10-16 12:32  一年`  阅读(142)  评论(0编辑  收藏  举报