2016-02-10 114 views
1
#include<stdio.h> 
#include<conio.h> 
int main() 
{ 
    char c, p; 
    p=getchar(); 
    int n=p+259; 
    c=n; 
    putchar(c); 
    return 0; 
} 

如果我輸入'a'字符,有人可以告訴我爲什麼這個程序的輸出是'd'字符嗎?我的C程序的輸出不是預期的輸出

如果p ='a',那麼n = 97 + 259 = 356。 如果我的n變量是356,那麼如何分配給值100('d'的ASCII碼)?

+0

檢查您的類型。一旦達到255,'char'就會翻到0。 – RPGillespie

+1

@RPGillespie以及如果'char'被簽名了怎麼辦? –

回答

5

char是一個8位的數據類型,你大大超過了它最大的表示:

a -> ascii 97 
97 + 259 -> 356 
356 & 0xFF -> 100 - overflowed, strip off "high bit" which can't be stored. 
100 -> ascii 'd' 
+0

非常感謝您的詳細解釋!並且我認爲356&0xFF - > 100。 –

+0

哎呦。對。謝謝。 –

5

char可以取值從0到255,因爲它是8位。

97 + 259 = 356,356模256 100

+0

好的,我明白了。非常感謝! –