2014-02-19 59 views
-1

如我們所知,箭頭鍵產生兩個輸出22477807275產生箭頭鍵輸出

碼1: -

int main() 
{ 
    int ch,ch1; 
    ch=getch(); 
    ch1=getch(); 
    printf("%d\n",ch); 
    printf("%d",ch1); 
} 

當你按下up key它顯示

224 
72 

代碼2: -

int main() 
{ 
    char ch,ch1; 
    ch=getch(); 
    ch1=getch(); 
    printf("%d\n",ch); 
    printf("%d",ch1); 
} 

當你按下up key它顯示

-32 
72 

我的問題是,你可以看到第二個輸出是相同的兩個charint,但爲什麼第一個輸出,即224-32intchar不同。

+0

你知道'getch'的返回類型是什麼嗎? – haccks

+0

@haccks:我認爲它只是返回從鍵盤 – zee

回答

1

當存儲在signed char中時,數字224溢出。

char通常被認爲是signed char並且可以保存值from -128 to 127。當您嘗試存儲超出這些限制的數字時,會發生溢出,導致數字從另一端傳出。

你可以認爲它是用水灌滿一個罐子,然後當你裝滿整個罐子時把整個罐子倒空,然後繼續填充你剩下的東西。在這種情況下,您正在填寫一個char變量224 ...因此;

  • 224首先填充127,
  • 然後如果只剩下224 - 127 = 97,
  • 多一個(97 - 1 = 96)和你在-128現在,
  • 你結束在-128 + 96 = -32
0

幫助/手冊頁說getch返回int:不是char。

根據編譯器的不同,char可以默認爲signed char或unsigned char。有符號字符的範圍是-128..127,一個無符號字符0..255。在這種情況下,它是一個有符號的字符。 Microsot編譯器爲此編譯器開關。

如果224被分配給一個無符號字符,你將得到224.如果它被分配給一個無符號字符,你將得到224-256 = -32。

+0

讀取的字符請詳細說明一下'簽名字符' – zee

1

這是因爲char的範圍是-128到127.這意味着您可以將範圍0到127的正值和負值-1分配到-128。