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

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

Восстановить пароль Регистрация
 
Disa
 Аватар для Disa
1 / 1 / 0
Регистрация: 30.11.2009
Сообщений: 88
17.01.2011, 11:47     сдвиги. не прога, а вопрос #1
Преподаватель задаёт всем такой вопрос, а я не пойму в чём подвох

а=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++ циклические сдвиги
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Josefina
 Аватар для Josefina
10 / 10 / 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
4838 / 3237 / 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
 Аватар для Day
1149 / 954 / 57
Регистрация: 29.10.2009
Сообщений: 1,384
18.01.2011, 12:11     сдвиги. не прога, а вопрос #5
Цитата Сообщение от Kenwood2010 Посмотреть сообщение
в обоих случаях ответ "a" равно 5
???????????
А впрочем, попробуй сам!
solar_wind
 Аватар для solar_wind
740 / 731 / 39
Регистрация: 06.07.2009
Сообщений: 2,937
Завершенные тесты: 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++ Сдвиги (С++)

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

Или воспользуйтесь поиском по форуму:
taras atavin
Ушёл с форума.
 Аватар для 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     сдвиги. не прога, а вопрос
Ответ Создать тему
Опции темы

Текущее время: 21:33. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru