Получение старшей части 64-битного целочисленного умножения
В C ++ скажем, что:
uint64_t i;
uint64_t j;
затемi * j
дастuint64_t
что имеет значение как нижнюю часть умножения междуi
а такжеj
то есть(i * j) mod 2^64
, Теперь, что если бы я хотел высшую часть умножения? Я знаю, что существует инструкция по сборке, которая делает что-то подобное при использовании 32-битных целых чисел, но я совсем не знаком со сборкой, поэтому я надеялся на помощь.
Какой самый эффективный способ сделать что-то вроде:
uint64_t k = mulhi(i, j);