codepad
[
create a new paste
]
login
|
about
Language:
C
C++
D
Haskell
Lua
OCaml
PHP
Perl
Plain Text
Python
Ruby
Scheme
Tcl
#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; }
Private
[
?
]
Run code