Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 为甚么?;1和+';0';是否需要显示二进制数?_C_Binary_Char_Shift_Bitwise And - Fatal编程技术网

C 为甚么?;1和+';0';是否需要显示二进制数?

C 为甚么?;1和+';0';是否需要显示二进制数?,c,binary,char,shift,bitwise-and,C,Binary,Char,Shift,Bitwise And,我在这里得到了这个代码来打印十进制的二进制,如果我用参数3运行这个函数,它会打印0000 0011,这是正确的,我知道>>会将二进制向右移动7到0以显示二进制,但我不理解代码的用途:&1和+0,有人能告诉我它们是用来做什么的吗 void gal_print(gal8 a) { int i = 8; while (i--) // printf("%d", i); putchar((a >> i & 1) + '0

我在这里得到了这个代码来打印十进制的二进制,如果我用参数3运行这个函数,它会打印0000 0011,这是正确的,我知道>>会将二进制向右移动7到0以显示二进制,但我不理解代码的用途:&1和+0,有人能告诉我它们是用来做什么的吗

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

此表达式带有按位运算符
(按位AND运算符)

用于提取数字的最右边的位。因此表达式的结果值将是
0
1

比如说

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

由于使用了函数
putchar
,因此需要将该整数值转换为字符

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

也就是说,
'0'+0
给出字符
'0'
'0'+1
给出字符
'1'
,它实际上不必。。。(无
,无+
'0'

void gal_打印(未签名字符a)
{
int i=字符位;
而(我--)
{
if(((无符号字符)((a>>i)>(字符位-1)))
{
putchar('1');
}
其他的
{
putchar('0');
}
}
}
00000010 // 2
&
00000001 // 1
========
00000000 // 0
putchar((a >> i & 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');
        }
    }

}