为什么显示二进制数需要&1和+'0'?

Why is the & 1 and + '0' is needed to display the binary number?

我在这里得到这个代码来打印十进制的二进制,如果我运行这个参数为 3 的函数,它会打印 0000 0011,这是正确的,我知道 >> 将移动binary to right 7 to 0 显示二进制,但我不明白代码的用途:& 1和+ 0,谁能告诉我那些是做什么用的?

void gal_print(gal8 a)
{
    int i = 8;
    while (i--)
       // printf("%d", i);
        putchar((a >> i & 1) + '0');
}

这个表达式用位运算符&(按位与运算符)

a >> i & 1

用于提取数字的最右边位。所以表达式的结果值将是 01.

例如

00000011 // 3
&
00000001 // 1
========
00000001 // 1

00000010 // 2
&
00000001 // 1
========
00000000 // 0

因为使用了函数putchar所以这个整数值需要转换成字符

putchar((a >> i & 1) + '0');

'0' + 0给出字符'0''0' + 1给出字符'1'

其实不必...(没有&,没有+'0'

void gal_print(unsigned char a)
{
    int i = CHAR_BIT;
    while (i--)
    {
        if(((unsigned char)(((a >> i) << (CHAR_BIT - 1))) >> (CHAR_BIT - 1)))
        {
            putchar('1');
        }
        else
        {
            putchar('0');
        }
    }

}