Я знаю, что лучший способ разделить число на 2 — сдвинуть один бит влево. Что мне делать, если я делю на кратное 2 (например, 8), я перехожу на 3 бита, вот мои вопросы:
Я знаю, что эти операции могут быть выполнены на уровне сборки, потому что мы имеем дело с регистрами, я просто не знаю, есть ли у нас доступ к таким вещам в C ++.
Доступ к старшим / младшим байтам целого числа и их замена могут быть выполнены в по крайней мере два пути. Либо комбинация >>
а также |
или с union
,
Например что-то вроде:
short swapped = (original<<8)|(original>>8);
даст вам два байта двухбайтового целого числа, поменяемого местами. Если у вас есть большее целое число (например, 4 байта), потребуется больше маскировки и сдвига, если все байты нужны в некотором порядке с произвольным перемешиванием.
Оптимизация деления на кратные 2 с правым смещением (>>
) это не оптимизация. Вы должны написать читаемый код, который дает четкое представление о том, что предполагается. Компилятор будет тривиально выполнять такие микрооптимизации.
Других решений пока нет …