2017-08-02 67 views
-3

此代碼輸出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 <= 6; i ++),我會得到相同的輸出。 – hago

回答

0

您打印一個變量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

相關問題