我正在尝试使用binary()
函数对整数进行二进制表示,然后使用reverse()
函数进行位反转,如下所示:
#include <stdio.h>
unsigned char reverse(unsigned char b) {
b = (b & 0xF0) >> 4 | (b & 0x0F) << 4;
b = (b & 0xCC) >> 2 | (b & 0x33) << 2;
b = (b & 0xAA) >> 1 | (b & 0x55) << 1;
return b;
}
int binary(int n)
{
int b;
if (n == 0)
{
return 0;
}
else
{
b = (n % 2) + 10 * binary(n / 2);
unsigned char i = (unsigned char)b;
return reverse(i);
}
}
int main()
{
int n;
printf("Enter a decimal number: ");
scanf("%d", &n);
printf("The binary equivalent of %d is %d\n", n, binary(n));
return 0;
}
[我遇到的问题是,我希望binary()
产生一个二进制数(例如,18
的二进制表示形式将是10010
),然后reverse()
函数采用该数字并产生以最低有效位(LSB)开头的反向二进制表示形式,在这种情况下应为01001
。但是,当我尝试运行它时,返回0。
[我是C的新手,我想也许是unsigned char
数据类型中的问题,但是什么时候,为什么要将b
转换为unsigned char
,它仍然不起作用?
我正在尝试使用binary()函数对整数进行二进制表示,然后使用reverse()函数进行位反转,如下所示:#include
反转位时,您要做的就是检查LSB。将该值添加到输出变量。然后将输出变量向左移动一,将原始数字向右移动一。在下面的数学示例中,我进行了第一个0移位,因此通过格式化它变得更容易了。
在您的10010示例中: