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

问题描述:

此代码输出12480 ..为什么?我预计它会打印124816.有人可以向我解释吗?有人可以向我解释这段代码吗?为什么我得到0而不是16?

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

*为什么*你预计它会打印124816? (你也可以通过这个循环第五次更简单地描述这个问题,这是你看到的东西,显然你不期望......) –

+0

是的。不仅是第5次,但如果我将for循环更改为(i = 1; i hago

您打印一个变量char,你将永远不会得到16(这是字符)出这一点。

你有48 = 110000,当你bitwise-or1110001 = 49从ASCII转换为char时将等于字符1

下一次你得到110000 | 10 = 110010 = 50这就是2

这一直持续到第5次迭代时110000 | 10000 = 110000 = 48这是0

+0

谢谢。我明白我犯的错误。我正在做一个0或0,但我应该用48的二进制版本做到这一点。 – hago

+0

@hago然后如果你的问题解决了,请考虑标记答案为接受。 – m0h4mm4d

+0

是的。我现在这么做了..可能是第一次使用这个。 – hago