swap()函数的几种写法及优劣

时间:2023-03-09 04:08:02
swap()函数的几种写法及优劣

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