You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Turbo C++中整数乘法输出错误有符号值的原因解析

为什么Turbo C++中1000*100输出负数而1000*10正常?

这事儿的核心原因其实和Turbo C++的16位编译器属性有关,咱们一步步拆解:

首先纠正你对int范围的误解

你提到的(-2147483648 到 +2147483647)是32位有符号整数的范围,但Turbo C++是为16位DOS环境设计的老编译器,它的int类型是16位的,对应的范围是:
-32768 到 32767

为什么第一个printf输出错误的负数?

咱们算一下:1000*100 = 100000,这个数值远远超过了16位有符号int的最大值32767。当有符号整数发生溢出时,Turbo C++会按照补码循环溢出的规则处理(虽然C标准里这种溢出属于未定义行为,但老编译器通常这么实现):

  • 16位整数的总取值空间是65536(2^16)
  • 用100000对65536取余,得到100000 - 1*65536 = 34464
  • 但34464已经超过了16位有符号int的上限32767,所以需要再减去65536,最终得到34464 - 65536 = -31072,也就是你看到的输出结果。

为什么第二个printf输出正常?

1000*10 = 10000,这个数值完全在16位有符号int的范围(-32768, 32767)内,没有发生溢出,自然能正确输出带符号的结果。

如果换成32位编译器(比如现代的GCC、MSVC),int默认是32位的,那1000*100的结果100000就完全在范围内,输出会是正确的100000。

内容的提问来源于stack exchange,提问作者Himanshu Singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 00:57:30