Источник вашего замешательства, кажется, в том, что означает «левый» и «правый». В смысле операторов <<
и >>
их значения находятся в обычном арифметическом c смысле, когда цифры записываются от наименее значимых справа до наиболее значимых слева. Фактически C определяет эти операторы как операторы arithmeti c, а не побитовые операторы, как умножение или деление на соответствующую степень двойки для входных данных, для которых они определены.
В частности, эти операторы не перемещают биты «влево» или «вправо» «в памяти»; они действуют даже не на память, а на ценности. Иногда имеет смысл подумать об их использовании для перемещения байтов в памяти (со сдвигами, кратными 8), и в этом случае, нужно ли вам <<
или >>
для перемещения байтов «влево» «в память» (в представлении) зависит от того, является ли представление прямым или обратным порядком байтов. Вы видите, что это встречается в таких местах, как , эта реализация memcpy
для ARM, которая работает на старых чипах без поддержки несогласованного доступа .