以下几个语句都能交换a,b的值
1)
a^=b^=a^=b;
2)
temp = a; a = b; b = temp;
3)
a = a^b; b = a^b; a = a^b;
效率为2) > 3) > 1)
验证代码如下:(linux下GCC和win下codeblocks通过编译)
#include <stdio.h> #include <sys/time.h> #include <unistd.h> void speed_1() { long i = 100000000; while(i){ int a = 10; int b = 20; a^=b^=a^=b; i--; } } void speed_2() { long i = 100000000; int temp = 0; while(i){ int a = 10; int b = 20; temp = a; a = b; b = temp; i--; } } void speed_3() { long i = 100000000; while(i) { int a = 10; int b = 20; a = a^b; b = a^b; a = a^b; i--; } } int main(void) { struct timeval start; struct timeval end; unsigned long diff_1; //此处的1,2,3数字代表的代码与上面所列一致 unsigned long diff_2; unsigned long diff_3; gettimeofday(&start, NULL); //gettimeofday()是C语言获得精确时间函数 speed_1(); gettimeofday(&end, NULL); diff_1 = 1000000 * (end.tv_sec - start.tv_sec) + end.tv_usec - start.tv_usec; gettimeofday(&start, NULL); speed_2(); gettimeofday(&end, NULL); diff_2 = 1000000 * (end.tv_sec - start.tv_sec) + end.tv_usec - start.tv_usec; gettimeofday(&start, NULL); speed_3(); gettimeofday(&end, NULL); diff_3 = 1000000 * (end.tv_sec - start.tv_sec) + end.tv_usec - start.tv_usec; printf("time_1 = %ld\n", diff_1); printf("time_2 = %ld\n", diff_2); printf("time_3 = %ld\n", diff_3); return 0; }
记得以前有人深入的分析过,我也不会,就简单的控制变量看下表面现象,看谁的效率更高些。
等以后在尝试从代码角度进行分析吧。