有人可以向我解释一下这段代码吗?为什么我得到的是0而不是16?

时间:2017-08-02 16:32:12

标签: bit-manipulation

此代码输出12480 ..为什么?我预计它会打印124816.有人可以向我解释一下吗?

int main()
    {
        char c = 48;  // From ASCII one can find that char 48 represents 0.
        int i , mask = 1;
        for(i = 1; i <= 5; i++)
           {
                printf("%c", c|mask); // Here print the char formatted output 
                mask = mask << 1;
            } 
        return 0;
    }

1 个答案:

答案 0 :(得分:1)

您正在将一个变量打印为char,您将永远不会获得16两个字符)。

您有48 = 110000,当bitwise-or1 110001 = 49时,您获得char,当从ASCII转换为1时,它将等于字符{ {1}}。

下次您获得110000 | 10 = 110010 = 502

这一直持续到110000 | 10000 = 110000 = 480时达到第5次迭代。