|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
12.02.2021, 14:16 | #1 |
Пользователь
Регистрация: 08.02.2020
Сообщений: 78
|
Что делает этот код?
Привет. Я вчера был на олимпиадну, и на вопросе был такой код:
Код:
|
12.02.2021, 14:18 | #2 |
Старожил
Регистрация: 24.01.2011
Сообщений: 3,034
|
# '>>' сдвиг вправо, сдвигает биты числа вправо на заданное число позиций
# 11 >> 1 даст 5, в двоичном виде 11 представляется как 1011, что будучи смещённым на 1 бит вправо, даёт 101, а это, в свою очередь, не что иное как десятичное 5 # '<<' сдвиг влево, сдвигает биты числа влево на заданное количество позиций # любое число в памяти компьютера представлено в виде битов - или двоичных чисел, т. е. 0 и 1 # 2 << 2 даст 8, в двоичном виде 2 представляет собой 10, сдвиг влево на 2 бита даёт 1000, что в десятичном виде означает 8 |
12.02.2021, 14:19 | #3 |
Старожил
Регистрация: 24.01.2011
Сообщений: 3,034
|
лично для меня тяжеловато в восприятии, многим нравится
|
12.02.2021, 20:08 | #4 |
Пользователь
Регистрация: 08.02.2020
Сообщений: 78
|
Понял, спасибо.
|
13.02.2021, 16:23 | #5 | |
Старожил
Регистрация: 23.10.2010
Сообщений: 2,304
|
Ну а что бы понятнее было, то:
Операция сдвига вправо >> - это целочисленное деление на 2; Операция сдвига влево << - это целочисленное умножение на 2. PS: Не сразу сообразил, почему: Цитата:
Кстати, у ТС сдвигается -1. При сдвиге влево младший бит заполняется нулём, а при сдвиге вправо старший бит заполняется знаком числа. Т.е., если число положительное, то старший бит заполняется нулём, а если отрицательное, то - 1 (единицей).
Как-то так, ...
|
|
13.02.2021, 16:28 | #6 |
Старожил
Регистрация: 24.01.2011
Сообщений: 3,034
|
не понятно, чем не нравится обычное представление записи таких операций, ещё может на иероглифами, смайликами писать будем? там вроде один знак - а смысла намного больше, + эмоции, на любителя........
|
16.02.2021, 22:18 | #7 |
Пользователь
Регистрация: 08.02.2020
Сообщений: 78
|
Тогда -1 >> 1 будет 0 да?
|
16.02.2021, 22:49 | #8 | |
Старожил
Регистрация: 23.10.2010
Сообщений: 2,304
|
Цитата:
Рассмотрим только один нибл. В этом случае 110 = 00012. -110 = 1110+1 = 11112 - перевели в дополнительный код. Сдвиг вправо на один бит даст снова 1111, т.к. старший бит размножается. Т.е. -110. Запусти IDLE и попробуй. Сдвиг на любое число бит вправо оставит -1.
Как-то так, ...
|
|
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Что делает этот код | Nastya2018 | Общие вопросы по Java, Java SE, Kotlin | 1 | 13.01.2019 23:54 |
Что делает этот код? | Andrew Garfield | Общие вопросы по программированию, компьютерный форум | 9 | 17.03.2017 16:28 |
Что это ? Что и как делает этот код? | Dimka-novitsek | Общие вопросы C/C++ | 1 | 03.05.2015 01:57 |
Что делает этот код? | Alex_sim | Общие вопросы C/C++ | 10 | 03.03.2010 23:45 |
Что делает этот код? | lucky | Общие вопросы Delphi | 4 | 17.06.2009 17:02 |