【发布时间】:2015-07-15 21:12:05
【问题描述】:
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;
}
我需要对 uint16_t 进行位反转,所以我编写了这个函数,它逐位读取原始 uint_t,并将它们写入另一个 uint,但位位置相反。问题是,当我传递大于 0x00 (0) 的整数时,函数返回 uint16_t 的最大值。
我是 c 位运算的初学者。
感谢您的回复。
编辑:“C 中位反转的最佳算法(从 MSB->LSB 到 LSB->MSB)”使用 32 位整数!
【问题讨论】:
标签: c bit-manipulation reverse bit-shift masking