[ create a new paste ] login | about

Link: http://codepad.org/RnfOT2Av    [ raw code | output | fork ]

fenrir - C++, pasted on Feb 25:
#include <iostream>
#include <iomanip>

using namespace std;

struct reverse_t {
  template <class T, int mask_bits>
  struct loop {
    static void exec(T &t){
      T mask(0);
      for(unsigned i(0); i < (((sizeof(T) * 8) >> 1) / mask_bits); i++){
        for(unsigned j(0); j < mask_bits; j++){
          mask <<= 1;
          mask |= 0x1;
        }
        mask <<= mask_bits;
      }
      t = ((t << mask_bits) & mask) | ((t >> mask_bits) & (~mask));
      loop<T, (mask_bits >> 1)>::exec(t);
    }
  };
  template <class T>
  struct loop<T, 1> {
    static void exec(T &t){
      T mask(0);
      for(unsigned i(0); i < ((sizeof(T) * 8) >> 1); i++){
        mask <<= 1;
        mask |= 0x1;
        mask <<= 1;
      }
      t = ((t << 1) & mask) | ((t >> 1) & (~mask));
    }
  };
  template <class T>
  void operator()(T &t){
    loop<T, ((sizeof(T) * 8) >> 1)>::exec(t);
  }
};

int main(){
  reverse_t reverse;
  unsigned int i(0xAA996655);
  cout << hex;
  cout << i << endl; // 0b 10101010 10011001 01100110 01010101
  reverse(i);
  cout << i << endl; // assume 0b 10101010 01100110 10011001 01010101 = 0xAA669955
  return 0;
}


Output:
1
2
aa996655
aa669955


Create a new paste based on this one


Comments: