#include <stdio.h> #include <time.h> int main(void) { clock_t start, end; long i, j = 1; start = clock(); for( i = 0; i <= 1000000000; ++i ) { j *= 1024 * 1024 * 1024; j /= 1024 * 1024 * 1024; } end = clock(); printf("time=%f/n", (double)(end-start)/CLOCKS_PER_SEC); start = clock(); for( i = 0; i <= 1000000000; ++i ) { j <<= 30; j >>= 30; } end = clock(); printf("time=%f/n", (double)(end-start)/CLOCKS_PER_SEC); printf("%d/n", j); return 0; } 在gcc下用gcc -S 命令可以看到乘法已经被优化成了移位,×13也会有一次移位,所以基本上效率应该差不多。 但是执行的时候还是能看到差距。