uint16_t ReverseInt16(uint16_t nonreversed) {
uint16_t reversed = 0;
reversed |= (nonreversed & 1 << 15) << 0; //check if bit 15 of nonreversed int is 1, if yes, write 1 to position 0, else write 0 to position 0
reversed |= (nonreversed & 1 << 14) << 1;
reversed |= (nonreversed & 1 << 13) << 2;
reversed |= (nonreversed & 1 << 12) << 3;
reversed |= (nonreversed & 1 << 11) << 4;
reversed |= (nonreversed & 1 << 10) << 5;
reversed |= (nonreversed & 1 << 9) << 6;
reversed |= (nonreversed & 1 << 8) << 7;
reversed |= (nonreversed & 1 << 7) << 8;
reversed |= (nonreversed & 1 << 6) << 9;
reversed |= (nonreversed & 1 << 5) << 10;
reversed |= (nonreversed & 1 << 4) << 11;
reversed |= (nonreversed & 1 << 3) << 12;
reversed |= (nonreversed & 1 << 2) << 13;
reversed |= (nonreversed & 1 << 1) << 14;
reversed |= (nonreversed & 1 << 0) << 15;
return reversed;
}
I need to bit-reverse uint16_t, so I wrote this function that reads bit by bit the original uint_t, and writes them to another uint, but in reverse bit position. The problem is, when I pass integer larger than 0x00 (0), the function returns maximum value of uint16_t.
I'm beginner in c bitwise operations.
Thank you for replies.
EDIT: The "Best Algorithm for Bit Reversal ( from MSB->LSB to LSB->MSB) in C" uses 32bit ints!