c - 添加两个短号码时

标签 c variables int short

这里的问题非常简单。我有一个非常简单的程序,用于将两个数字相加并打印出这些数字的总和(如下)。运行程序时,它按预期工作并打印出 40 000 表示 20 000 + 20 000。但是当我将 int a、b 和 sum 更改为 short a、b 和 sum 时,我得到 -25 536 作为答案。谁能解释为什么会这样?我有一个想法,但很想听听知道它的人的意见。感谢阅读。

int a, b, sum;

a = 20000;  b = 20000;  sum = a+b;
printf("%d + %d = %d\n", a, b, sum);

最佳答案

在您的系统上,short 大概是 16 位,因此值的范围是 -327683276720000 + 20000 大于最大值,因此这会导致溢出,从而导致未定义的行为。

如果更改为 unsigned short,则范围变为 065525,加法将起作用。此外,溢出是用 unsigned 整数定义的,它简单地使用模块化算法环绕,例如(unsigned short)65535 + 2 = 1

关于c - 添加两个短号码时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39281478/

相关文章:

c - fatal error : sstream: No such file or directory

c - 需要帮助使这个程序计算 PSD

javascript - 函数在不应该设置变量时设置变量

R:创建名称来自变量的新列

连接两个 int 数组

c - 函数指针模拟方法在 C 中有害吗?

python - SWIG 从 c 中调用 python 代码

javascript - console.log() 显示变量值实际变化前的变化值

c# - 在字符串列表中查找所有整数

java - 返回整数的第一个数字