为什么显示二进制数需要&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
用于提取数字的最右边位。所以表达式的结果值将是 0
或 1
.
例如
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');
}
}
}
我在这里得到这个代码来打印十进制的二进制,如果我运行这个参数为 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
用于提取数字的最右边位。所以表达式的结果值将是 0
或 1
.
例如
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');
}
}
}