我理解除c|mask
部分之外的代码。所以有人可以帮我理解c|mask
中发生的事情。是这样的,char|int
?并且此条件操作的输出为int
?
int main() {
char c=48;
int i, mask=01;
for(i=1; i<=5; i++)
{
printf("%c", c|mask);
mask = mask<<1;
}
return 0;
}
这个代码的工作方式。和输出:12480
编辑:我对代码毫无疑问。我只是想知道&#34; char被提升为int&#34; (c|mask
)。它是如何完成的,为什么又可以反过来呢? -Thanks
答案 0 :(得分:4)
像char这样的较小整数类型会在许多操作(包括int
)上升级为|
,但这种促销在这里并不重要。 |
是binary or操作,如果设置了至少一个相应的输入位,则设置结果中的每个位。 c|mask
是一个整数,但printf("%c"
将其打印为一个字符。要将其打印为整数,请改用printf("%d"
。 c = 48
表示ASCII数字'0'
,其后跟随其他数字。
c = 48 = 0x30 = '0'
为每次迭代评估它:
i = 1, mask = 1 = 0x01, c|mask = 0x31 = '1'
i = 2, mask = 2 = 0x02, c|mask = 0x32 = '2'
i = 3, mask = 4 = 0x04, c|mask = 0x34 = '4'
i = 4, mask = 8 = 0x08, c|mask = 0x38 = '8'
i = 5, mask = 16 = 0x10, c|mask = 0x30 = '0' (the mask bit is already set in `c`, so the result is 'c' without changes)