Ами по принцип резултата е от типа на по големият тип на единият операнд. Т.е. ако умножиш един байт със друг трябва да кастнеш към инт единият операнд ако произведението се очаква да е > 255. Кастването явно отнема някакви ресурси не зная какви. Не зная и как са оптимизирали нещата в _mul .
Умножение/деление на може да се получи като се шифтне един бит съответно наляво/надясно. Съответно за 4, 8, 16 и т.н. със 2,3,4 бита. За 32768 също става. Това работи значително по-оптимално - не помня можеше ли с една инструкция да се превъртат 8 бита...
На теб би ти оптимизирало две от сметките, но това едва ли е толкова важно.
Иначе по-мощните процесори си имат модули за хардуерно умножаване.
