Jump to content

Операция сдвига на С++


Recommended Posts

Люди, изучаю значит С++ и сколько ни чатаю никак не могу врубиться каким образом происходит эта операция и что и куда она сдвигает? Где может использоваться? :dontgetit:

З.Ы. Ногами не бейти за глупый вопрос! :blink:

Link to comment
Share on other sites

Guest Форматцевт

это побитовый сдвиг, применяется для маскирования, ну расчета сигнатуры, кс ....много для чего это для аппаратных вещей в основном.

Edited by Форматцевт
Link to comment
Share on other sites

Побитовый сдвиг?

Т.е., к примеру, есть символ 'A' - у него 8-ми битный код, к примеру - 01011101

Применим к нему операвцию сдвига и что получим? Символ изменится?

Т.е. для шифрования может применятся?

Link to comment
Share on other sites

Операция двоичного сдвига легко обьясняется, если ты знаком с двоичной системой счисления. Суть операции сдвига состоит в изменении позиции каждого бита на фиксированное число.

Легче обьяснить на примере. Возьмем любое число, пусть будет 13. В двоичной системе счисления оно представляется как 1101.

Сделаем сдвиг на 1 позицию влево. Т.е. четвертый бит станет пятым, третий - четвертым и т.д., на место первого вставим 0. Число превратится в 11010, т.е. 26 в десятичной системе счисления. Это тебе левый сдвиг на одну позицию.

Сделаем сдвиг (исходного числа, т.е. 13) на 1 позицию вправо. Первый байт потеряется, остальные передвинутся. В итоге получим 110, т.е. 6 в десятичной.

В принципе, можно рассматривать и десятичный сдвиг. Тогда при левом сдвиге 13 превратится в 130, а при правом - в 1.

В общем случае при левом сдвиге число умножается на основание системы счисления, а при правом - делится (с потерей остатка).

Теперь рассмотрим операцию сдвига в контексте программирования, где все данные хранятся в переменных с ограниченной длиной.

Для примера возьмем переменную размером один байт (8 бит), и число 212, т.е. 11010100 в двоичной системе.

При попытке сделать левый сдвиг мы обнаруживаем, что старший бит не влазит в размерность, т.е. становится 9-м битом (при максимуме 8). Для разрешения такой ситуации были введены две вариации сдвига: с потерей бита, и циклический. При сдвиге с потерей старшего бита - старший бит просто отбрасывается, и число 11010100 превратится в 10101000. При циклическом сдвиге "выпадающий" бит вносится на место первого, т.е. число 11010100 превратится в 10101001. Примерно та же ситуация и с правым сдвигом: первый бит либо теряется, либо становится восьмым.

Также есть еще знаковый сдвиг, предназначенный для корректной работы со сдвигом отрицательных чисел, но это уже тонкости, которые для общего понимания не обязательны.

Т.е. для шифрования может применятся?

Не только может, но и очень часто применяется.

Применяется вообще везде, где логической единицей данных является бит: анализ флагов, использование битовых масок...

Также может использоваться для быстрого умножения и деления на числа, являющиеся степенями двойки.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...