C 为甚么?;1和+';0';是否需要显示二进制数?
我在这里得到了这个代码来打印十进制的二进制,如果我用参数3运行这个函数,它会打印0000 0011,这是正确的,我知道>>会将二进制向右移动7到0以显示二进制,但我不理解代码的用途:&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
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');
}
}
}