Pascal:Val() 函数返回负数
Pascal: Val() function is returning negative number
我一直在尝试将字符串转换为整数,但 val() 过程返回负数,我认为是因为字符串太大(没有意义,字符串的长度大约是 8),所以我尝试手动进行转换,它 returns 与 val() 返回的数字完全相同:
program a;
uses crt;
var
text:string;
number, code:integer;
begin
number:=0;
text := '3142436';
val(text, number, code);
writeln('Number: ', number);
writeln('Code: ', code);
end.
它returns:
Number: -3292
Code: 0
制作我自己的转换程序:
program a;
uses crt;
var
numero, cod:integer;
info:string;
i:char;
begin
cod:=0;
numero:=0;
info:='3142436';
for i in info do
begin
case i of
'0': cod:= 0;
'1': cod:= 1;
'2': cod:= 2;
'3': cod:= 3;
'4': cod:= 4;
'5': cod:= 5;
'6': cod:= 6;
'7': cod:= 7;
'8': cod:= 8;
'9': cod:= 9;
end;
numero := (numero * 10) + cod;
write('Now: ', numero);
writeln(' (Adding ',cod, ')');
end;
writeln('Result: ', numero);
end.
Returns完全一样:
Now: 3 (Adding 3)
Now: 31 (Adding 1)
Now: 314 (Adding 4)
Now: 3142 (Adding 2)
Now: 31424 (Adding 4)
Now: -13437 (Adding 3)
Now: -3292 (Adding 6)
Result: -3292
我做错了什么吗?
您显然使用了 16 位整数类型。
3142436 是 $2FF324,截断为一个单词是 $F324。解释为有符号整数,十进制为 -3292。
有许多 Pascal 实现。您没有指定您使用的是哪一个,但显然 Integer
是一个具有当前编译器设置的 16 位整数。
只需将数字声明为long int;它工作正常^_^
我一直在尝试将字符串转换为整数,但 val() 过程返回负数,我认为是因为字符串太大(没有意义,字符串的长度大约是 8),所以我尝试手动进行转换,它 returns 与 val() 返回的数字完全相同:
program a;
uses crt;
var
text:string;
number, code:integer;
begin
number:=0;
text := '3142436';
val(text, number, code);
writeln('Number: ', number);
writeln('Code: ', code);
end.
它returns:
Number: -3292
Code: 0
制作我自己的转换程序:
program a;
uses crt;
var
numero, cod:integer;
info:string;
i:char;
begin
cod:=0;
numero:=0;
info:='3142436';
for i in info do
begin
case i of
'0': cod:= 0;
'1': cod:= 1;
'2': cod:= 2;
'3': cod:= 3;
'4': cod:= 4;
'5': cod:= 5;
'6': cod:= 6;
'7': cod:= 7;
'8': cod:= 8;
'9': cod:= 9;
end;
numero := (numero * 10) + cod;
write('Now: ', numero);
writeln(' (Adding ',cod, ')');
end;
writeln('Result: ', numero);
end.
Returns完全一样:
Now: 3 (Adding 3)
Now: 31 (Adding 1)
Now: 314 (Adding 4)
Now: 3142 (Adding 2)
Now: 31424 (Adding 4)
Now: -13437 (Adding 3)
Now: -3292 (Adding 6)
Result: -3292
我做错了什么吗?
您显然使用了 16 位整数类型。
3142436 是 $2FF324,截断为一个单词是 $F324。解释为有符号整数,十进制为 -3292。
有许多 Pascal 实现。您没有指定您使用的是哪一个,但显然 Integer
是一个具有当前编译器设置的 16 位整数。
只需将数字声明为long int;它工作正常^_^