【发布时间】:2016-04-21 02:26:12
【问题描述】:
我可以读到 int 范围(有符号)来自 [−32767, +32767] 但我可以说,例如
int a=70000;
int b=71000;
int c=a+b;
printf("%i", c);
return 0;
输出为 141000(正确)。调试器不应该告诉我 “此操作超出范围”或类似内容?
我想这一定是因为我忽略了 C 编程的基础知识,但我目前正在阅读的书籍中没有一本书没有说明这个“问题”。
编辑: 2147483647好像是上限,谢谢。如果总和超过该数字,则结果为负,这是预期的,但如果是减法,例如:2147483649-2147483647=2 结果仍然很好。我的意思是,为什么值 2147483649 正确地用于减法目的(或者至少在我看来)?
【问题讨论】:
-
如果您打印
sizeof(int),这就是您的int可以存储的字节数。这是一个提示。 -
你确定这是你机器上 int 的范围吗?尝试使用 sizeof(int) 打印 int 的字节数。
-
在今天的机器上,
int至少默认为 32 位? -
您的
int可能是 4 个字节,足以存储该值。
标签: c++ int range undefined-behavior