В некоторых случаях, когда вы используете делители мощности из 2, вы можете сделать лучше с помощью собственных методов расчета для расчета остатка, но в целом полуподобный достойный компилятор сделает наилучшую работу с переменными делителями или «нечетные» делители, которые не соответствуют ни одному шаблону.
Обратите внимание, что несколько процессоров даже не имеют операции умножения, и поэтому (на этих) умножение происходит довольно медленно и добавляет (не менее 64x для 32-разрядного умножения). (Но умный компилятор может улучшить это, если множитель является литералом.) Немного большее число не имеет операции деления или имеет довольно медленный. (На процессоре с умножением умножения множителя может быть только порядка 4 раз медленнее, чем добавлять, но на «нормальном» оборудовании он в 16-32 раза медленнее для 32-разрядной операции. Разделить по своей сути в 2-4 раза медленнее, чем умножить, но может быть намного медленнее на некоторых аппаратных средствах.)
Операция с остатком редко реализуется в аппаратных средствах, и обычно A % B
отображает что-то вдоль линий A - ((A/B) * B)
(для обеспечения правильного знака может потребоваться несколько дополнительных операций и т. д.).
(я узнал об этом материале, в то время как микропрограммный набор инструкций для SUMC computer for RCA/NASA еще в начале 70-х лет.)
Остальная часть (для '%') довольно часто выводится как часть операции деления. x86 и MIPS реализуют это, что охватывает довольно большой набор современных процессоров. – nneonneo
@nneonneo - Ах, да, я забыл об этом. Хотя несколько процессоров не покрывают остаток от разрыва (как отдельный результат), и часто оставшаяся часть полученная таким образом не соответствует определению языка. В стороне, иногда разочаровывает то, что ни один общий язык не предусматривает операцию * деления с остатком *, поскольку, когда вам нужен остаток, вам часто требуется частное. (Хотя я предполагаю, что некоторые компиляторы могут оптимизировать две операции вместе при правильных обстоятельствах.) –
Python является обычным явлением, и он имеет 'divmod' именно для этой цели :) – nneonneo