Guest User

Untitled

a guest
Jun 16th, 2016
264
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.77 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4.  
  5. /*
  6. gcc -O3
  7. sample.bin:50000003
  8. c1: 50000003
  9. sub1: 0.030000 seconds
  10. c2: 50000003
  11. sub2: 0.090000 seconds
  12.  
  13. wcl386 /onkhtx bittest.c
  14. c1: 50000003
  15. sub1: 0.156000 seconds
  16. c2: 50000003
  17. sub2: 0.109000 seconds
  18.  
  19. cl /O2 bittest.c
  20. c1: 50000003
  21. sub1: 0.310000 seconds
  22. c2: 50000003
  23. sub2: 0.068000 seconds
  24. */
  25.  
  26. #define E_1        59
  27. #define E_2        60
  28. #define E_3        61
  29. #define E_4        62
  30. #define E_5        63
  31. #define E_6        64
  32. #define E_7        65
  33. #define E_8        66
  34. #define E_9        67
  35. #define E_10       68
  36. #define E_11       69
  37. #define E_12       70
  38. #define E_13       71
  39. #define E_14       72
  40. #define E_15       73
  41. #define E_16       74
  42. #define E_17       75
  43. #define E_18       76
  44.  
  45. void sub1(char *);
  46. void sub2(char *, int *);
  47.  
  48. int bitset1[8];    
  49. int size;
  50. char *data;
  51.  
  52. int main(int argc, const char **argv)
  53. {
  54.     FILE *fh;
  55.     clock_t t0;
  56.     clock_t t1;
  57.  
  58.     fh = fopen(argv[1], "rb");
  59.    
  60.     if (fh == NULL) {
  61.         printf("err1: %s\n", argv[1]);
  62.         exit(EXIT_FAILURE);
  63.     }
  64.    
  65.     fseek(fh, 0L, SEEK_END);
  66.     size = ftell(fh);
  67.     fseek(fh, 0L, SEEK_SET);
  68.  
  69.     data = malloc(size + 1);
  70.     size = fread(data, 1, size, fh);
  71.     fclose(fh);
  72.    
  73.     if (size <= 0) {
  74.         printf("err2: %d\n", size);
  75.         exit(EXIT_FAILURE);
  76.     }
  77.    
  78.     printf("%s:%d\n", argv[1], size);
  79.  
  80.     /*------------------------------------------------------------------------*/
  81.    
  82.     bitset1[E_1        / 32] |= 1 << E_1        % 32;
  83.     bitset1[E_2        / 32] |= 1 << E_2        % 32;
  84.     bitset1[E_3        / 32] |= 1 << E_3        % 32;
  85.     bitset1[E_4        / 32] |= 1 << E_4        % 32;
  86.     bitset1[E_5        / 32] |= 1 << E_5        % 32;
  87.     bitset1[E_6        / 32] |= 1 << E_6        % 32;
  88.     bitset1[E_7        / 32] |= 1 << E_7        % 32;
  89.     bitset1[E_8        / 32] |= 1 << E_8        % 32;
  90.     bitset1[E_9        / 32] |= 1 << E_9        % 32;
  91.     bitset1[E_10       / 32] |= 1 << E_10       % 32;
  92.     bitset1[E_11       / 32] |= 1 << E_11       % 32;
  93.     bitset1[E_12       / 32] |= 1 << E_12       % 32;
  94.     bitset1[E_13       / 32] |= 1 << E_13       % 32;
  95.     bitset1[E_14       / 32] |= 1 << E_14       % 32;
  96.     bitset1[E_15       / 32] |= 1 << E_15       % 32;
  97.     bitset1[E_16       / 32] |= 1 << E_16       % 32;
  98.     bitset1[E_17       / 32] |= 1 << E_17       % 32;
  99.     bitset1[E_18       / 32] |= 1 << E_18       % 32;
  100.    
  101.     t0 = clock();
  102.     sub1(data);
  103.     t1 = clock();
  104.     printf("sub1: %f seconds\n", (double)(t1 - t0) / CLOCKS_PER_SEC);
  105.    
  106.     t0 = clock();
  107.     sub2(data, bitset1);
  108.     t1 = clock();
  109.     printf("sub2: %f seconds\n", (double)(t1 - t0) / CLOCKS_PER_SEC);
  110.    
  111.     return 0;
  112. }
  113.  
  114. void sub1(char *data)
  115. {
  116.     int i = 0;
  117.    
  118.     while (  
  119.            data[i] != E_1        &&
  120.            data[i] != E_2        &&
  121.            data[i] != E_3        &&
  122.            data[i] != E_4        &&
  123.            data[i] != E_5        &&
  124.            data[i] != E_6        &&
  125.            data[i] != E_7        &&
  126.            data[i] != E_8        &&
  127.            data[i] != E_9        &&
  128.            data[i] != E_10       &&
  129.            data[i] != E_11       &&
  130.            data[i] != E_12       &&
  131.            data[i] != E_13       &&
  132.            data[i] != E_14       &&
  133.            data[i] != E_15       &&
  134.            data[i] != E_16       &&
  135.            data[i] != E_17       &&
  136.            data[i] != E_18
  137.            ) {
  138.         i++;
  139.        
  140.         if (i >= size)
  141.             break;
  142.     }
  143.  
  144.     printf("c1: %d\n", i);
  145. }
  146.  
  147. void sub2(char *data, int *bitset)
  148. {
  149.     int i = 0;
  150.    
  151.     while (!(bitset[data[i] / 32] & 1 << data[i] % 32)) {
  152.         i++;
  153.        
  154.         if (i >= size)
  155.             break;
  156.     }
  157.  
  158.     printf("c2: %d\n", i);
  159. }
Advertisement
Add Comment
Please, Sign In to add comment