我们知道箭头键会产生两个输出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 :(得分:1)
当存储在signed char
中时,编号224溢出。
char
通常被视为signed char
,并且可以包含值from -128 to 127。当您尝试存储超出这些限制的数字时,会发生溢出,导致数字从另一端转移。
你可以把它想象成用水填充一个罐子,然后当你装满整个罐子时清空整个罐子,然后继续填充你剩下的任何东西。在这种情况下,您使用char
填充224
变量...所以;
答案 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。