Follow along with the video below to see how to install our site as a web app on your home screen.
Note: This feature may not be available in some browsers.
To mathematically combine signed and unsigned types correctly the compiler must promote both operands to the next larger size data type and then perform the combination.
To see why this is necessary, consider two operands, an Integer with the value -128 and a Cardinal with the value 130. The Cardinal type has one more digit of precision than the Integer type, and thus comparing the two values cannot accurately be performed in only 32 bits. The proper solution for the compiler is to promote both these types to a larger, common, size and then to perform the comparison.
The compiler will only produce this warning when the size is extended beyond what would normally be used for calculating the result.
{$APPTYPE CONSOLE}
program Produce;
var
i : Integer;
c : Cardinal;
begin
i := -128;
c := 130;
WriteLn(i + c);
end.
In the example above, the compiler warns that the expression will be calculated at 64 bits rather than the supposed 32 bits.
"Correct" depends on whether your variable can go negative. If not (and you should error-trap for this) then Cardinal works. If you expect to work with negative numbers, then you should use Int64, which is the type that the compiler was promoting to.so i guess i should change my integer variable to a cardinal to make the warning disappear. Am i correct?
var i : Cardinal;