#include <stdio.h>
#include <time.h>
#include <limits.h>
#define NUM_MAX LONG_MAX
typedef long int num_t;
int is_even_loop(num_t num){
while(num>0)
num -=2;
return num==0 ? 1:0;
}
int is_even_bitwise(num_t num){
return !(((num_t)1) & num);
}
int main(void){
float start_t, dt;
int even;
num_t num = NUM_MAX;
puts("Using loop:");
start_t = clock();
even = is_even_loop(num);
dt = (clock() - start_t)/CLOCKS_PER_SEC;
printf("%d is %s; total time = %f\n", num, even?"even":"odd", dt);
puts("Using bitwise operations:");
start_t = clock();
even = is_even_bitwise(num);
dt = (clock() - start_t)/CLOCKS_PER_SEC;
printf("%d is %s; total time = %f\n", num, even?"even":"odd", dt);
return 0;
}
Resultados na minha máquina (Core 2 Duo, Arch Linux kernel 3.5.3-1 32-bits):
Using loop:
2147483646 is even; total time = 3.330000
Using bitwise operations:
2147483646 is even; total time = 0.000000