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

为何输入99999时Free Pascal的read(x)给x赋值-31073而非99999?

输入99999却输出-31073的原因分析

程序代码

program readTest;
var
    x: integer;
begin
    read(x);
    writeln(x)
end.

执行脚本

$ echo 99999 | ./readTest
-31073
$

问题原因

  • 这是16位有符号整数溢出导致的结果:Free Pascal默认环境中,integer类型对应16位有符号整数,取值范围是 -32768 到 32767。
  • 输入的99999远超出该范围,数值溢出后只保留二进制低16位。99999的二进制低16位是1100001101000011,作为有符号整数解读时,最高位为1代表负数,转换为十进制就是-31073。

解决办法

将变量类型改为longint(32位有符号整数,范围覆盖-2147483648到2147483647),即可正常存储99999:

program readTest;
var
    x: longint;
begin
    read(x);
    writeln(x)
end.

内容的提问来源于stack exchange,提问作者Nikita Burak

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 11:22:35