除了这个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
编辑:我对代码没有疑问。我只想知道“char 被提升为 int”(c|mask
)。它是如何完成的,为什么,反之亦然吗? -谢谢
最佳答案
较小的整数类型(例如 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)
关于与 OR (|) 运算符混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37657437/