概述:
就是将一个数对应的二进制位进行相应的翻转,比如: 0000 0101 翻转之后: 1010 0000
看下面代码: 注意我们使用的数据类型并不是一个字节,所以说不一定是八位,而且不同的系统一个字节对应的位数有所不同。
#include <cstdio>
#include <cstdlib>
#include <string.h>
#include <ctype.h>
#include <limits.h>
/*对数据的二进制进行翻转 两个版本都可移植*/
// 版本1
unsigned int reverse_bits(unsigned int value) {
int bytes = sizeof(unsigned);
int bits = bytes * CHAR_BIT; // 得出总共存在多少位
unsigned int tmp = 0;
for (int i = 0; i < bits -1 ; i++) {
if (value & 1) tmp |= 1; // 如果value的当前位是1,那么就将emp的当前位设置为1
value >>= 1;
tmp <<= 1;
}
return tmp;
}
// 版本二
unsigned int reverse_bits(unsigned int value) {
unsigned int tmp = 0;
for (unsigned i = 1; i != 0; i << 1) { // 循环的次数刚好是数据位数,因为移动对应的位刚好,就将1移出去了
if (value & 1) tmp |= 1; // 如果value的当前位是1,那么就将emp的当前位设置为1
value >>= 1;
tmp <<= 1;
}
return tmp;
}
int main(void) {
unsigned ret = reverse_bits(25);
printf("翻转之后的结果: %u\n", ret);
system("pause");
}