Симаргл Опубликовано 16 февраля, 2006 Жалоба Поделиться Опубликовано 16 февраля, 2006 Люди, изучаю значит С++ и сколько ни чатаю никак не могу врубиться каким образом происходит эта операция и что и куда она сдвигает? Где может использоваться? З.Ы. Ногами не бейти за глупый вопрос! Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Форматцевт Опубликовано 16 февраля, 2006 Жалоба Поделиться Опубликовано 16 февраля, 2006 (изменено) это побитовый сдвиг, применяется для маскирования, ну расчета сигнатуры, кс ....много для чего это для аппаратных вещей в основном. Изменено 16 февраля, 2006 пользователем Форматцевт Ссылка на комментарий Поделиться на другие сайты Поделиться
Симаргл Опубликовано 16 февраля, 2006 Автор Жалоба Поделиться Опубликовано 16 февраля, 2006 Побитовый сдвиг? Т.е., к примеру, есть символ 'A' - у него 8-ми битный код, к примеру - 01011101 Применим к нему операвцию сдвига и что получим? Символ изменится? Т.е. для шифрования может применятся? Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Форматцевт Опубликовано 16 февраля, 2006 Жалоба Поделиться Опубликовано 16 февраля, 2006 01011101 10111010 01011101 00101110 Ссылка на комментарий Поделиться на другие сайты Поделиться
Shurr Опубликовано 16 февраля, 2006 Жалоба Поделиться Опубликовано 16 февраля, 2006 Операция двоичного сдвига легко обьясняется, если ты знаком с двоичной системой счисления. Суть операции сдвига состоит в изменении позиции каждого бита на фиксированное число. Легче обьяснить на примере. Возьмем любое число, пусть будет 13. В двоичной системе счисления оно представляется как 1101. Сделаем сдвиг на 1 позицию влево. Т.е. четвертый бит станет пятым, третий - четвертым и т.д., на место первого вставим 0. Число превратится в 11010, т.е. 26 в десятичной системе счисления. Это тебе левый сдвиг на одну позицию. Сделаем сдвиг (исходного числа, т.е. 13) на 1 позицию вправо. Первый байт потеряется, остальные передвинутся. В итоге получим 110, т.е. 6 в десятичной. В принципе, можно рассматривать и десятичный сдвиг. Тогда при левом сдвиге 13 превратится в 130, а при правом - в 1. В общем случае при левом сдвиге число умножается на основание системы счисления, а при правом - делится (с потерей остатка). Теперь рассмотрим операцию сдвига в контексте программирования, где все данные хранятся в переменных с ограниченной длиной. Для примера возьмем переменную размером один байт (8 бит), и число 212, т.е. 11010100 в двоичной системе. При попытке сделать левый сдвиг мы обнаруживаем, что старший бит не влазит в размерность, т.е. становится 9-м битом (при максимуме 8). Для разрешения такой ситуации были введены две вариации сдвига: с потерей бита, и циклический. При сдвиге с потерей старшего бита - старший бит просто отбрасывается, и число 11010100 превратится в 10101000. При циклическом сдвиге "выпадающий" бит вносится на место первого, т.е. число 11010100 превратится в 10101001. Примерно та же ситуация и с правым сдвигом: первый бит либо теряется, либо становится восьмым. Также есть еще знаковый сдвиг, предназначенный для корректной работы со сдвигом отрицательных чисел, но это уже тонкости, которые для общего понимания не обязательны. Т.е. для шифрования может применятся? Не только может, но и очень часто применяется. Применяется вообще везде, где логической единицей данных является бит: анализ флагов, использование битовых масок... Также может использоваться для быстрого умножения и деления на числа, являющиеся степенями двойки. Ссылка на комментарий Поделиться на другие сайты Поделиться
Симаргл Опубликовано 16 февраля, 2006 Автор Жалоба Поделиться Опубликовано 16 февраля, 2006 Shurr: спасибо! Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти