bit — деление на 2-х и байтовые операции переполнения стека

Я знаю, что лучший способ разделить число на 2 — сдвинуть один бит влево. Что мне делать, если я делю на кратное 2 (например, 8), я перехожу на 3 бита, вот мои вопросы:

  1. Как я могу делать такие операции в C ++, битовое движение?
  2. Как я могу получить доступ к старшему байту int и младшему байту int, если я хочу поменять их значения?

Я знаю, что эти операции могут быть выполнены на уровне сборки, потому что мы имеем дело с регистрами, я просто не знаю, есть ли у нас доступ к таким вещам в C ++.

0

Решение

Доступ к старшим / младшим байтам целого числа и их замена могут быть выполнены в по крайней мере два пути. Либо комбинация >> а также |или с union,

Например что-то вроде:

short swapped = (original<<8)|(original>>8);

даст вам два байта двухбайтового целого числа, поменяемого местами. Если у вас есть большее целое число (например, 4 байта), потребуется больше маскировки и сдвига, если все байты нужны в некотором порядке с произвольным перемешиванием.

Оптимизация деления на кратные 2 с правым смещением (>>) это не оптимизация. Вы должны написать читаемый код, который дает четкое представление о том, что предполагается. Компилятор будет тривиально выполнять такие микрооптимизации.

3

Другие решения

Других решений пока нет …