以C中的最低有效位开始的二进制表示形式

问题描述 投票:0回答:1

我正在尝试使用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 unsigned char ...

c function bit
1个回答
0
投票

反转位时,您要做的就是检查LSB。将该值添加到输出变量。然后将输出变量向左移动一,将原始数字向右移动一。在下面的数学示例中,我进行了第一个0移位,因此通过格式化它变得更容易了。

在您的10010示例中:

© www.soinside.com 2019 - 2024. All rights reserved.