与 OR (|) 运算符混淆

标签 c

除了这个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/

相关文章:

c - 在 C 中解压缩 .gz 字符串?

c - 素描效果和卡通效果的应用方法

c - 运行 Exec() 命令参数

c ->> 在 C 中有什么意义吗?

c - 链表反转功能导致无限打印循环

C 中无法打印最大行

c - 将程序返回到主菜单

c - fopen 中重试的优化控制

c - 错误 : expected expression before 'unsigned'

c - 无法理解结构的内存分配