Здравствуйте, VVVa, Вы писали:
VVV>с add и sub понятно — там отрицательные и положительные числа считаются одинаково... VVV>а как считает imul — он что определяет является ли число отрицательным, потом извлекает знак и переводит в положительное число, а потом умножает?
Зачем что-то куда-то переводить,
скажем работаем с 32битными числами, тогда -1 * 2 это 0xffffffff * 2,
перемножаем как безнаковые и получаем 0x1_ffff_fffe ,
отбрасываем то что "вылезло" за 32бита и получаем 0xffff_fffe ,
а это как раз -2.