2014-02-19 3 views
-1

Как мы знаем, что клавиши со стрелками производит два выхода 224 и 77 или 80 или 72 или 75.производить вывод клавиш со стрелками

Код 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 

Мой вопрос заключается в том, что, как вы можете видеть, что второй выход одинакова для обоих char и int, но почему первый выход т.е. 224 и -32 отличаются с int и char.

+0

Знаете ли вы, что такое тип возврата 'getch'? – haccks

+0

@haccks: Я думаю, что он просто возвращает символ, читаемый с клавиатуры – zee

ответ

1

Номер 224, при хранении в signed char, переполнение.

char обычно считается signed char и может хранить значения from -128 to 127. Когда вы пытаетесь сохранить число за пределами этих пределов, происходит переполнение, которое приводит к тому, что число меняется с другого конца.

Вы можете думать об этом как о заполнении банки водой, а затем опорожнить всю банку, когда вы заполните всю банку, а затем продолжайте заполнять все, что осталось. В этом случае вы заполняете переменную char с 224 ... Итак;

  • 224 сначала заполняет 127,
  • тогда вы остались с 224 - 127 = 97,
  • еще один (97 - 1 = 96), и вы на -128 сейчас,
  • вы в конечном на -128 + 96 = -32
0

Страница справки/man говорит, что getch возвращает int: no char.

В зависимости от компилятора char может по умолчанию использовать либо подписанный символ, либо символ unsigned. Диапазон для подписанного символа равен -128..127, unsigned char 0..255. В этом случае это подписанный символ. Для этого у компилятора Microsot есть компилятор.

Если 224 назначен знаку без знака, вы получите 224. Если ему присвоен знак без знака, вы получите 224-256 = -32.

+0

, пожалуйста, уточните его немного в случае 'signed char' – zee

1

Это потому, что диапазон символов составляет от -128 до 127. Это означает, что вы можете назначить положительные значения от 0 до 127 и отрицательные значения от -1 до -128.

Смежные вопросы