W1024 Combining signed and unsigned types - widened both operands (Object Pascal)

From Appmethod Topics
Jump to: navigation, search

Go Up to Error and Warning Messages (Object Pascal) Index

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.

program Produce;
    i : Integer;
    c : Cardinal;

  i := -128;
  c := 130;
  Writeln(i + c);

In the example above, the compiler warns that the expression will be calculated at 64 bits rather than the supposed 32 bits.