产生箭头键的输出

时间:2014-02-19 15:26:34

标签: c char int output arrow-keys

我们知道箭头键会产生两个输出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-32是与intchar不同。

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

这是因为char的范围是-128到127.这意味着您可以指定范围0到127的正值和-1到-128的负值。

答案 2 :(得分:0)

help / man页面说getch返回int:not char。

根据编译器的不同,char可以默认为signed char或unsigned char。 signed char的范围是-128..127,unsigned char 0..255。在这种情况下,它是一个签名的字符。 Microsot编译器有一个编译器开关。

如果224被分配给unsigned char,你将得到224.如果它被分配给unsigned char,你将获得224-256 = -32。