在算法课的第一节课上,教授让我们找出错误并解释结果中字母a后面的原因。答案中有一些ASCII码,但我没有得到
#include<stdio.h>
int main()
{
char var=353;
printf("%c",var);
return 0;
}
`
最佳答案
如果在您的实现中char
默认为unsigned
,并且char
是8位,则
char var = 353;
相当于
char var = (353 % 256);
这个模量表达式的值是
97
。这是a
的ASCII代码。如果
char
默认为signed char
,则代码将生成由实现定义的行为,因为353太大。如果您仍然得到a
,这是因为当有符号整数溢出发生时,实现恰好使用相同的模块算术,这是常见的。但是你不应该依赖它,因为它是特定于实现的。