[英]Why wont my C code about reversed bits work?
我正在编写代码来反转位相同但顺序相反的无符号整数。 我的代码在接受用户输入时不会停止运行。 我究竟做错了什么?
#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;
}
在您的程序中,while 条件正在检查 n 是否大于零。 但是,在循环内部,没有修改 n 的操作。 所以请尝试使用它。 它会起作用。
unsigned int reverse_bits(unsigned int n) {
unsigned int reverse = 0;
while (n>0) {
reverse <<=1;
if((n & 1) == 1) {
reverse = reverse | 1;
}
n=n>>1;
}
return reverse;
}
正如@Mark Benningfield 所说,您忘记在循环内修改n
并且
反转字符串的最佳方法是:-
它仅在最左边的位为1
时运行。
unsigned int reverse_bits(unsigned int n)
{
int reverse = 0;
int x = 1;
while ( n > 0 )
{
reverse = reverse << 1;
if ( n & x )
reverese = reverse | 1;
n = n >> 1;
}
return reverse;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.