【发布时间】:2021-11-13 14:46:03
【问题描述】:
我正在编写代码来反转一个无符号整数,其位相同但顺序相反。我的代码在接受用户输入时不会停止运行。我做错了什么?
#include <stdio.h>
unsigned int reverse_bits(unsigned int n);
int main(void) {
unsigned int n;
printf("Enter an unsigned integer: ");
scanf("%u",&n);
printf("%u\n",reverse_bits(n));
return 0;
}
unsigned int reverse_bits(unsigned int n) {
unsigned int reverse = 0;
while(n>0) {
reverse <<= 1;
if((n & 1) == 1) {
reverse = reverse^1;
}
}
return reverse;
}
【问题讨论】:
-
你永远不会在循环内修改
n,所以循环永远不会结束。 -
如果输入是 1011,您想要输出 1101(反转为四个有效位)还是 11010000000000000000000000000000(反转为 32 位,或其他一些固定大小的字段)?如果只在有效位内反转,请注意反转的反转不会恢复数字,因为反转 101100 会产生 001101,即 1101,然后反转会产生 1011,而不是原来的 101100。
标签: c reverse bit unsigned-integer