Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Disa
1 / 1 / 0
Регистрация: 30.11.2009
Сообщений: 88
#1

сдвиги. не прога, а вопрос - C++

17.01.2011, 11:47. Просмотров 408. Ответов 6
Метки нет (Все метки)

Преподаватель задаёт всем такой вопрос, а я не пойму в чём подвох

а=5
а>>10
а<<10
а=?

а=5
а<<10
а>>10
а=?

"а" не будет просто равно 5? если нет, то поясните, пожалуйста, почему
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.01.2011, 11:47     сдвиги. не прога, а вопрос
Посмотрите здесь:
Сдвиги. (<< и >>) C++
Сдвиги C++
C++ Сдвиги (С++)
C++ циклические сдвиги
Побитовые сдвиги C++
битовые сдвиги C++
Побитовые сдвиги C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Josefina
11 / 11 / 1
Регистрация: 27.09.2010
Сообщений: 32
17.01.2011, 12:25     сдвиги. не прога, а вопрос #2
<< операция "сдвиг влево" битового представления значения левого целочисленного операнда на количество разрядов, равное значению правого целочисленного операнда
>> операция "сдвиг вправо" битового представления значения левого целочисленного операнда на количество разрядов, равное значению правого целочисленного операнда

десятичное 4 = двоичное 100
4 << 2 - сдвинуть влево на 2 разряда, то есть добавляем 2 нуля
получаем двоичное 10000 = десятичное 16

десятичное 5 = двоичное 101
5 >> 1 - сдвинуть вправо на 1 разряд, то есть убираем справо 1 значение
получаем двоичное 10 = десятичное 2

Аналогично:

десятичное 5 = двоичное 101

a << 10, добавляем 10 нулей, получаем двоичное 1010000000000 = десятичное 5120
a >> 10, убираем 10 последних цифр двоичного представления числа получаем двоичное 0 = десятичное 0

Если рассматривать операции последовательно то,
Код
а=5
а>>10
а<<10
а=?
а = 0

Код
а=5
а<<10
а>>10
а=?
а = 5
Kenwood2010
48 / 59 / 7
Регистрация: 26.11.2010
Сообщений: 192
17.01.2011, 12:27     сдвиги. не прога, а вопрос #3
в обоих случаях ответ "a" равно 5
accept
4821 / 3241 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
18.01.2011, 06:09     сдвиги. не прога, а вопрос #4
Цитата Сообщение от Kenwood2010
в обоих случаях ответ "a" равно 5
не, есть различие, при сдвиге новое пространство заполняется нулём
поэтому 5 >> 10 равно 101B >> 1, 010B >> 1, 001B >> 1, 000B >> 1, 000B >> 1, ...
для беззнаковых оно всегда нулём заполняется, а для знаковых, только когда число неотрицательное
и сдвигать можно не на бесконечное количество, а на ограниченное размером типа
для int из четырёх байт допустимое число будет 31
Day
1154 / 959 / 57
Регистрация: 29.10.2009
Сообщений: 1,385
18.01.2011, 12:11     сдвиги. не прога, а вопрос #5
Цитата Сообщение от Kenwood2010 Посмотреть сообщение
в обоих случаях ответ "a" равно 5
???????????
А впрочем, попробуй сам!
solar_wind
756 / 747 / 42
Регистрация: 06.07.2009
Сообщений: 2,969
Завершенные тесты: 1
18.01.2011, 12:24     сдвиги. не прога, а вопрос #6
Josefina, написала абсолютно правильно

Только прога не совсем корректно написана, надо так хотя бы
а=5;
а=а>>10;
а=а<<10;
а=?

а=5;
а=а<<10;
а=а>>10;
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.01.2011, 12:52     сдвиги. не прога, а вопрос
Еще ссылки по теме:
Циклические сдвиги C++
Логические сдвиги C++
C++ Побитовые сдвиги
C++ Циклические сдвиги массива
Регистры, сдвиги и массивы C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
18.01.2011, 12:52     сдвиги. не прога, а вопрос #7
Цитата Сообщение от Disa Посмотреть сообщение
"а" не будет просто равно 5? если нет, то поясните, пожалуйста, почему
Результат любого сдвига должен быть целым, а при выходе за левую границу биты теряются. Так что в первом случае должен быть : 5=0000000000000101b,
0000000000000101b>>10=000000b, 000000b<<10=0000000000000000b, 0000000000000000b=0.
А если начинать влево, то всё зависит от разрядности. 1 байт:
5=00000101b, 00000101b<<10=00000000b, 00000000b>>10=00000000b, 00000000b=0.
2 байта:
5=0000000000000101b, 0000000000000101b<<10=0001010000000000b, 0001010000000000b,>>10=0000000000000101b, 0000000000000101b=5.
Yandex
Объявления
18.01.2011, 12:52     сдвиги. не прога, а вопрос
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru