Closed. This question is off-topic。它当前不接受答案。
想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
5年前关闭。
这是代码(复制并粘贴):
我尝试编译它,但是它不起作用。我是愚蠢的还是开始时是“ int”或“ short”而不是char?一旦我更改了它,它就会起作用,但是我担心它应该照原样工作...
该程序真的只将x和y相加并显示结果吗?如果我使用short而不是char,那就是这样做的。
提前致谢!
E:为什么要投反对票?我的帖子有什么问题?
想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
5年前关闭。
这是代码(复制并粘贴):
#include <stdio.h>
int main(){
char x,y,result;
//Sample 1:
x = 35;
y = 85;
result = x + y;
printf("Sample 1: %hi + %hi = %hi\n",x ,y, result);
//Sample 2:
x = 85;
y = 85;
result = x + y;
printf("Sample 2: %hi + %hi = %hi\n",x ,y, result);
return 0;
}
我尝试编译它,但是它不起作用。我是愚蠢的还是开始时是“ int”或“ short”而不是char?一旦我更改了它,它就会起作用,但是我担心它应该照原样工作...
该程序真的只将x和y相加并显示结果吗?如果我使用short而不是char,那就是这样做的。
提前致谢!
E:为什么要投反对票?我的帖子有什么问题?
最佳答案
想法:
对于入门课程,这是一个糟糕的例子。根据您的实现,char
是带符号或无符号的数字。根据这一事实,代码的行为将有很大不同。
就是说,是的,这段代码基本上是将两个数字相加并打印结果。我同意%hi
是奇怪的。这需要一个short int
。我个人希望%hhi
或只是%i
,让整数提升做到这一点。
如果数字是未签名的字符85 + 35 == 120
,可能小于CHAR_MAX(可能为255)。因此没有问题,一切正常。85 + 85 == 170
,可能小于CHAR_MAX(可能为255)。因此没有问题,一切正常。
如果数字是带符号的字符85 + 35 == 120
,可能小于CHAR_MAX(可能为127)。因此没有问题,一切正常。85 + 85 == 170
,可能大于CHAR_MAX。这会导致有符号整数溢出,这是未定义的行为。
关于c - 任务:描述以下C程序做什么? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26633580/
10-11 16:45