2 / 2 / 0
Регистрация: 30.11.2009
Сообщений: 88
|
|
1 | |
сдвиги. не прога, а вопрос17.01.2011, 11:47. Показов 619. Ответов 6
Метки нет (Все метки)
Преподаватель задаёт всем такой вопрос, а я не пойму в чём подвох
а=5 а>>10 а<<10 а=? а=5 а<<10 а>>10 а=? "а" не будет просто равно 5? если нет, то поясните, пожалуйста, почему
0
|
17.01.2011, 11:47 | |
Ответы с готовыми решениями:
6
Скажите почему прога зависает. Не пойму. Прога имитирует входной потол: пользователь вводит предложение которое сохраняется в буфер. Сдвиги (С++) Сдвиги. (<< и >>) Сдвиги |
11 / 11 / 4
Регистрация: 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 а=? Код
а=5 а<<10 а>>10 а=?
1
|
55 / 59 / 14
Регистрация: 26.11.2010
Сообщений: 192
|
|
17.01.2011, 12:27 | 3 |
в обоих случаях ответ "a" равно 5
0
|
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
|
|
18.01.2011, 06:09 | 4 |
Сообщение от Kenwood2010
поэтому 5 >> 10 равно 101B >> 1, 010B >> 1, 001B >> 1, 000B >> 1, 000B >> 1, ... для беззнаковых оно всегда нулём заполняется, а для знаковых, только когда число неотрицательное и сдвигать можно не на бесконечное количество, а на ограниченное размером типа для int из четырёх байт допустимое число будет 31
0
|
770 / 760 / 59
Регистрация: 06.07.2009
Сообщений: 3,021
|
|
18.01.2011, 12:24 | 6 |
Josefina, написала абсолютно правильно
Только прога не совсем корректно написана, надо так хотя бы а=5; а=а>>10; а=а<<10; а=? а=5; а=а<<10; а=а>>10;
1
|
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
18.01.2011, 12:52 | 7 |
Результат любого сдвига должен быть целым, а при выходе за левую границу биты теряются. Так что в первом случае должен быть : 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.
2
|
18.01.2011, 12:52 | |
18.01.2011, 12:52 | |
Помогаю со студенческими работами здесь
7
Сдвиги Побитовые сдвиги Циклические сдвиги битовые сдвиги Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |