2013-01-17 169 views
-7

我只是想知道爲什麼n = 0在這裏?C++:爲什麼char c = 0xff和int n = c + 1得到100的結果?

char c = 0xff; 
    int n = c+1; 
    cout << n << endl; 
    system("pause"); 

1)C = 0xff的
2)0xff的+ 1 = 0x100的。

你能解釋一下嗎?

+1

如果將這些語句包裝在'int main(){...}'中,我認爲你應該得到0或256. 100從哪裏來? – aschepler

+4

因此,在題目中你問「爲什麼是100?」,而在問題的主體中,你問「爲什麼是n = 0?」。那麼,它是什麼? 100?還是0? – AnT

回答

5

假設一個無符號char類型,0xff會給十進制值255添加一個到,你會得到256或0x100或256這將被打印出來100如果操縱了std::cout十六進制打印與std::cout << std::hex;

假設8位簽名char,0xff會溢出,給-1。加1即可得到0.

+1

世界上有10種類型的人使用二進制和那些誰不 – tletnes

+1

他們的忍者編輯打破了你的答案。 – user7116

+0

@sixlettervariables我開始懷疑我是否會生氣... – juanchopanza

5

您的平臺顯然使用簽名char類型。當你用0xFF初始化它時,它會溢出並導致實現定義的行爲。您的c結果等於-1。當您將1添加到-1時,您將獲得0。這裏沒什麼特別的

聲明你cunsigned char,所得n值將是0x100,這是你預期大概是什麼。

+0

但是(s)他沒有得到0 ... –

+3

@Oli Charlesworth:問題的標題與問題的主體相矛盾。在他的身上,他說'n'是0. – AnT

+0

啊,在這種情況下,我正在刪除我的答案... –