2012-01-28 75 views
4

可能重複:
why is initializing an integer in VC++ to 010 different from initialising it to 10?C++的cout輸出解釋,請

這讓我很困惑,我希望你可以回答我的問題。這個代碼怎麼會產生輸出「116」?

#include <iostream> 

int main() 
{ 
    std::cout << 0164 << std::endl; 
    return 0; 
} 

的代碼已經++ 2010和被編譯與MSVC克++在Mac OS X 「COUT」可打印「0」單獨和「164」單獨,但只要「0」是在第一個數字編號輸出變化。

+0

謝謝你們,其實我從來沒有想過八進制問題!對我來說最糟糕的部分是,現在你提到了,我已經知道了:)無論如何,感謝您的幫助,ALL OF YOU :) – Benjamin 2012-01-28 10:05:38

回答

12

因爲前面的0使得數字被解釋爲octal

0164 = 
4 * 1 + 
6 * 8 + 
1 * 64 
= 116 

或者,通過二進制:

0164 = 
    0 1 6 4 = 
000 001 110 100 = 
1110100 = 
116 

同樣爲hexadecimal numbers,你寫他們作爲0x1FA例如。

2

在C及其兄弟中,前面的0的數字是八進制數,而不是十進制數。

因此您的電話號碼是1 * 82 (1 * 64 = 64) plus 6 * 81 (6 * 8 = 48) plus 4 * 80 (4 * 1 = 4),相當於116

對什麼十六進制和八進制的大型論文見here是C.