Перейти к содержанию
СофтФорум - всё о компьютерах и не только

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


Рекомендуемые сообщения

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

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

Ссылка на комментарий
Поделиться на другие сайты

Гость Форматцевт

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

Изменено пользователем Форматцевт
Ссылка на комментарий
Поделиться на другие сайты

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

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

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

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

Ссылка на комментарий
Поделиться на другие сайты

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Ссылка на комментарий
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...