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