Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- unsigned short gf_t = 44 // = 00101100
- unsigned int v; // input bits to be reversed
- unsigned int r = v; // r will be reversed bits of v; first get LSB of v
- int s = sizeof(v) * CHAR_BIT - 1; // extra shift needed at end
- for (v >>= 1; v; v >>= 1)
- {
- r <<= 1;
- r |= v & 1;
- s--;
- }
- r <<= s; // shift when v's highest bits are zero
- unsigned int v; // 32-bit word to reverse bit order
- // swap odd and even bits
- v = ((v >> 1) & 0x55555555) | ((v & 0x55555555) << 1);
- // swap consecutive pairs
- v = ((v >> 2) & 0x33333333) | ((v & 0x33333333) << 2);
- // swap nibbles ...
- v = ((v >> 4) & 0x0F0F0F0F) | ((v & 0x0F0F0F0F) << 4);
- // swap bytes
- v = ((v >> 8) & 0x00FF00FF) | ((v & 0x00FF00FF) << 8);
- // swap 2-byte long pairs
- v = ( v >> 16 ) | ( v << 16);
- unsigned short v;
- // swap odd and even bits
- v = ((v >> 1) & 0x5555) | ((v & 0x5555) << 1);
- // swap consecutive pairs
- v = ((v >> 2) & 0x3333) | ((v & 0x3333) << 2);
- // swap nibbles ...
- v = ((v >> 4) & 0x0F0F) | ((v & 0x0F0F) << 4);
- // swap bytes
- v = ((v >> 8) & 0x00FF) | ((v & 0x00FF) << 8);
- #include <stdio.h>
- #include <assert.h>
- #include <stdint.h>
- inline uint16_t reverse(uint16_t v) {
- v = ((v >> 1) & 0x5555) | ((v & 0x5555) << 1); /* swap odd/even bits */
- v = ((v >> 2) & 0x3333) | ((v & 0x3333) << 2); /* swap bit pairs */
- v = ((v >> 4) & 0x0F0F) | ((v & 0x0F0F) << 4); /* swap nibbles */
- v = ((v >> 8) & 0x00FF) | ((v & 0x00FF) << 8); /* swap bytes */
- return v;
- }
- main() {
- uint16_t gf_t = 44;
- printf("%hun", reverse(gf_t));
- }
- v = ((v >> 1) & 0x5555) | ((v & 0x5555) << 1);
- v = ((v >> 2) & 0x3333) | ((v & 0x3333) << 2);
- v = ((v >> 4) & 0x0F0F) | ((v & 0x0F0F) << 4);
- v = ((v >> 8) & 0x00FF) | ((v & 0x00FF) << 8);
- int main() {
- unsigned short gf_r = 0;
- for ( int iter = 0; iter < sizeof(short) * 8; ++iter )
- {
- unsigned short tmp = gf_t;
- tmp = tmp & 1;
- gf_r = (gf_r << 1 ) | tmp;
- gf_t = gf_t >> 1;
- }
- cout << hex << gf_r << endl;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement