fork download
  1. #include <stdio.h>
  2. #include <time.h>
  3. #include <string.h>
  4.  
  5. int main(void) {
  6. unsigned int a1 = 0xf3040506;
  7. unsigned int *a = ( unsigned int *)&a1;
  8. unsigned char *m = (unsigned char* )&a1;
  9. unsigned long forcount = 300000000 ,i;
  10. unsigned char r , g , b , al;
  11.  
  12.  
  13. printf("%x\n", *a);
  14.  
  15.  
  16. printf("r i %x\n", m[0]);
  17. printf("g i %x\n", m[1]);
  18. printf("b i %x\n", m[2]);
  19. printf("a i %x\n", m[3]);
  20.  
  21.  
  22.  
  23. printf("r p %x\n", (unsigned char) *a );
  24. printf("g p %x\n", (unsigned char) (*a >> 8));
  25. printf("b p %x\n", (unsigned char) (*a >> 16) );
  26. printf("a p %x\n", (unsigned char) (*a >> 24) );
  27.  
  28.  
  29. clock_t t;
  30.  
  31. t = clock();
  32.  
  33. for(i = 0;i < forcount ;i++)
  34. {
  35. r = m[0];
  36. g = m[1];
  37. b = m[2];
  38. al = m[3];
  39. }
  40. t = clock() - t ;
  41.  
  42. printf ("pointer take (%f seconds).\n",((float)t)/CLOCKS_PER_SEC);
  43.  
  44.  
  45. t = clock();
  46.  
  47. for(i = 0;i < forcount ;i++)
  48. {
  49. r = (unsigned char) *a;
  50. g = (unsigned char) (*a >> 8);
  51. b = (unsigned char) (*a >> 16);
  52. al = (unsigned char) (*a >> 24);
  53. }
  54. t = clock() - t ;
  55.  
  56. printf ("shift take (%f seconds).\n",((float)t)/CLOCKS_PER_SEC);
  57.  
  58. m[0] = r;
  59. m[0] = g;
  60. m[0] = b;
  61. m[0] = al;
  62. return 0;
  63. }
Success #stdin #stdout 3.78s 2248KB
stdin
Standard input is empty
stdout
f3040506
r i 6
g i 5
b i 4
a i f3
r p 6
g p 5
b p 4
a p f3
pointer take (1.770000 seconds).
shift take (2.010000 seconds).