Наткнулся недавно на одну неожиданную особенность поведения операторов
div и
mod в CIL, заключающуюся в том, что они по-разному преобразуют операнды к нужным им типам и выдают иногда разные результаты разных базовых типов по сравнению с X++. Отличия на примерах представлены ниже:
Код:
X++ CIL
тестовая операция тип результата результат тип результата результат
------------------------------------------------------------------------------
0 div 2 Integer 0 Int64 0
intMax() div 2 Integer 1073741823 Int64 1073741823
realMax() div 2 Integer 1073741823 Int64 4999999999999999
int64Max() div 2 Int64 4611686018427387903 Int64 4611686018427387903
intMax() mod 2 Integer 1 Integer 1
realMax() mod 2 Integer 1 Real 1,00
int64Max() mod 2 Int64 1 Int64 1
Проверялось в AX 2012 R2 на ядрах сборок 6.2.1000.4051 (CU7) и 6.2.1000.8310.