与OR(|)oparator混淆

时间:2016-06-06 12:25:21

标签: 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

编辑:我对代码毫无疑问。我只是想知道&#34; char被提升为int&#34; (c|mask)。它是如何完成的,为什么又可以反过来呢? -Thanks

1 个答案:

答案 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)