Advertisement
Guest User

Untitled

a guest
Feb 22nd, 2019
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.92 KB | None | 0 0
  1. unsigned short gf_t = 44 // = 00101100
  2.  
  3. unsigned int v; // input bits to be reversed
  4. unsigned int r = v; // r will be reversed bits of v; first get LSB of v
  5. int s = sizeof(v) * CHAR_BIT - 1; // extra shift needed at end
  6.  
  7. for (v >>= 1; v; v >>= 1)
  8. {
  9. r <<= 1;
  10. r |= v & 1;
  11. s--;
  12. }
  13. r <<= s; // shift when v's highest bits are zero
  14.  
  15. unsigned int v; // 32-bit word to reverse bit order
  16.  
  17. // swap odd and even bits
  18. v = ((v >> 1) & 0x55555555) | ((v & 0x55555555) << 1);
  19. // swap consecutive pairs
  20. v = ((v >> 2) & 0x33333333) | ((v & 0x33333333) << 2);
  21. // swap nibbles ...
  22. v = ((v >> 4) & 0x0F0F0F0F) | ((v & 0x0F0F0F0F) << 4);
  23. // swap bytes
  24. v = ((v >> 8) & 0x00FF00FF) | ((v & 0x00FF00FF) << 8);
  25. // swap 2-byte long pairs
  26. v = ( v >> 16 ) | ( v << 16);
  27.  
  28. unsigned short v;
  29.  
  30. // swap odd and even bits
  31. v = ((v >> 1) & 0x5555) | ((v & 0x5555) << 1);
  32. // swap consecutive pairs
  33. v = ((v >> 2) & 0x3333) | ((v & 0x3333) << 2);
  34. // swap nibbles ...
  35. v = ((v >> 4) & 0x0F0F) | ((v & 0x0F0F) << 4);
  36. // swap bytes
  37. v = ((v >> 8) & 0x00FF) | ((v & 0x00FF) << 8);
  38.  
  39. #include <stdio.h>
  40. #include <assert.h>
  41. #include <stdint.h>
  42.  
  43. inline uint16_t reverse(uint16_t v) {
  44. v = ((v >> 1) & 0x5555) | ((v & 0x5555) << 1); /* swap odd/even bits */
  45. v = ((v >> 2) & 0x3333) | ((v & 0x3333) << 2); /* swap bit pairs */
  46. v = ((v >> 4) & 0x0F0F) | ((v & 0x0F0F) << 4); /* swap nibbles */
  47. v = ((v >> 8) & 0x00FF) | ((v & 0x00FF) << 8); /* swap bytes */
  48. return v;
  49. }
  50.  
  51. main() {
  52. uint16_t gf_t = 44;
  53. printf("%hun", reverse(gf_t));
  54. }
  55.  
  56. v = ((v >> 1) & 0x5555) | ((v & 0x5555) << 1);
  57. v = ((v >> 2) & 0x3333) | ((v & 0x3333) << 2);
  58. v = ((v >> 4) & 0x0F0F) | ((v & 0x0F0F) << 4);
  59. v = ((v >> 8) & 0x00FF) | ((v & 0x00FF) << 8);
  60.  
  61. int main() {
  62.  
  63. unsigned short gf_r = 0;
  64. for ( int iter = 0; iter < sizeof(short) * 8; ++iter )
  65. {
  66. unsigned short tmp = gf_t;
  67. tmp = tmp & 1;
  68. gf_r = (gf_r << 1 ) | tmp;
  69. gf_t = gf_t >> 1;
  70. }
  71.  
  72. cout << hex << gf_r << endl;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement