在算法课的第一节课上,教授让我们找出错误并解释结果中字母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,这是因为当有符号整数溢出发生时,实现恰好使用相同的模块算术,这是常见的。但是你不应该依赖它,因为它是特定于实现的。

07-24 09:46
查看更多