为何输入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
相关产品推荐
相关产品推荐

