Được gửi bởi
tiensusu
Vậy thì theo jiSh@n thì với 2 cách làm sau đây tại sao ra kết quả khác nhau(trong Turbo):
1.Var a:integer;b:longint;
Begin
a:=20000; b:=0;
write(b+a+a);
readln;
end.
kq ==> 40000
2.Var a:integer;b:longint;
Begin
a:=20000; b:=0;
write(a+a+b);
readln;
end.
kq ==> -25536
Trên các compiler thì kiểu của biểu thức sẽ là kiểu của toán hạng đầu tiên.
b+a => longint + integer => kiểu của kết quả sẽ là longint
a+b => integer + longint => kiểu kết quả là integer, bất chấp b là kiểu longint.
Hãy thử trên CodeGear Delphi 2007 cũng cho ra kết quả tương tự:
Code:
var a:integer; b:int64;
begin
a:=maxint; b:=maxint; // 2147483647
writeln(a+a+b); // 2147483645
writeln(b+a+a); // 6442450941
readln;
end.
Bookmarks