К арифметическим относятся бинарные операции
+, -,
*, / для вещественных и целых чисел, бинарные операции
div и mod для целых чисел и унарные операции
+ и - для вещественных и целых чисел. Тип выражения
x op y, где
op - знак бинарной операции
+, - или *,
определяется из следующей таблицы:
shortint |
byte |
smallint |
word |
integer |
longword |
int64 |
uint64 |
BigInteger |
single |
real |
decimal |
|
shortint |
integer |
integer |
integer |
integer |
integer |
int64 |
int64 |
uint64 |
BigInteger |
single |
real |
decimal |
byte |
integer |
integer |
integer |
integer |
integer |
longword |
int64 |
uint64 |
BigInteger |
single |
real |
decimal |
smallint |
integer |
integer |
integer |
integer |
integer |
int64 |
int64 |
uint64 |
BigInteger |
single |
real |
decimal |
word |
integer |
integer |
integer |
integer |
integer |
longword |
int64 |
uint64 |
BigInteger |
single |
real |
decimal |
integer |
integer |
integer |
integer |
integer |
integer |
int64 |
int64 |
uint64 |
BigInteger |
single |
real |
decimal |
longword |
int64 |
longword |
int64 |
longword |
int64 |
longword |
uint64 |
uint64 |
BigInteger |
single |
real |
decimal |
int64 |
int64 |
int64 |
int64 |
int64 |
int64 |
uint64 |
int64 |
uint64 |
BigInteger |
single |
real |
decimal |
uint64 |
uint64 |
uint64 |
uint64 |
uint64 |
uint64 |
uint64 |
uint64 |
uint64 |
BigInteger |
single |
real |
decimal |
BigInteger |
BigInteger |
BigInteger |
BigInteger |
BigInteger |
BigInteger |
BigInteger |
BigInteger |
BigInteger |
BigInteger |
- |
- |
- |
single |
single |
single |
single |
single |
single |
single |
single |
single |
- |
single |
real |
- |
real |
real |
real |
real |
real |
real |
real |
real |
real |
- |
real |
real |
- |
decimal |
decimal |
decimal |
decimal |
decimal |
decimal |
decimal |
decimal |
decimal |
- |
- |
- |
decimal |
То есть, если операнды - целые, то результатом является самый короткий целый тип, требуемый для представления всех получаемых значений.
При выполнении бинарной операции с uint64
и знаковым целым результирующим типом будет uint64,
при этом может произойти переполнение, не вызывающее исключения.
Для операции / данная таблица исправляется следующим образом:
результат деления любого целого на целое имеет тип real.
Для операций div и mod выполняются эти же правила, но операнды могут быть только целыми. Правила
вычисления операций div и
mod - следующие:
x div y- результат целочисленного деленияxнаy. Точнее,x div y = x / y, округленное до ближайшего целого по направлению к 0;- остаток от целочисленного деления
x mod yxнаy. Точнее,x mod y = x - (x div y) * y.
Унарная арифметическая операция
+ для любого целого типа возвращает этот тип. Унарная
арифметическая операция - возвращает для целых типов, меньших или
равных integer, значение типа integer, для
longword и int64
- значение типа int64, к uint64 унарная операция - не применима, для типов single и real - соответственно типы
single и real. То есть так же
результатом является самый короткий тип, требуемый для представления всех
получаемых значений.