История изменений
Исправление alysnix, (текущая версия) :
потому что выражение
long1 = int1 + int2;
транслируется в
mov reg_int, int1
add reg_int, int2
mov long1, reg_int
а вот выражение
long1 = (long)int1 + int2;
в
mov reg_long, int1
add reg_long, int2
mov long1, reg_long
выбор разрядности делается по типу операндов. а не по типу результата.
пример - длинное сложное выражение навроде
long = (int + int*(short / short) * int) / int...
по вашей логике поскольку результат - long - то все выражение надо считать в long?… это логика неправильная. длина и сложность выражения ничем не ограничена. и считается оно в текущей разрядности операндов(самого длинного в данной бинарной операции ).
присваивание в более длинный тип говорит только о самом присваивании, но не способе получения результата.
Исходная версия alysnix, :
потому что выражение
long1 = int1 + int2;
транслируется в
mov reg_int, int1
add reg_int, int2
mov long1, reg_int
а вот выражение
long1 = (long)int1 + int2;
в
mov reg_long, int1
add reg_long, int2
mov long1, reg_long
выбор разрядности делается по типу операндов. а не по типу результата.
пример - длинное сложное выражение навроде
long = (int + int*(short / short) * int) / int.
по вашей логике поскольку результат - long - то все выражение надо считать в long?… это логика неправильная. длина и сложность выражения ничем не ограничена. и считается оно в текущей разрядности операндов(самого длинного в данной бинарной операции ).
присваивание в более длинный тип говорит только о самом присваивании, но не способе получения результата.