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

Побитовый сдвиг - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.85
cetrael
 Аватар для cetrael
60 / 5 / 3
Регистрация: 01.10.2011
Сообщений: 93
22.04.2012, 15:10     Побитовый сдвиг #1
Выполнение данного кода приравнивает asd к нулю. Хотя должно к единице, судя по моим вычислениям.

C++
1
char asd = 10 & 2 >> 1;
1010
&0010
-------
0010
и потом сдвинуть 0010 вправо на 1 даст 0001. В чем просчет? Есть какие-то приоритеты?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
22.04.2012, 15:12     Побитовый сдвиг #2
Первой выполняется операция сдвига, потом только &.
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
22.04.2012, 15:14     Побитовый сдвиг #3
сдвиг без скобок приоритетнее битового "И"
C++
1
char asd = (10 & 2)>> 1;
cetrael
 Аватар для cetrael
60 / 5 / 3
Регистрация: 01.10.2011
Сообщений: 93
22.04.2012, 15:24  [ТС]     Побитовый сдвиг #4
Спасибо, тогда ещё вопрос, в чем разница:
C++
1
char zxc = ((*(reinterpret_cast<const char*>(&(todo == 0 ? length : (todo == 3 ? md: sec))) + cur_length_byte) & (1 << pos)) >> pos);
result = 0
C++
1
    char qwe = (((todo == 0 ? length : (todo  == 3 ? md: sec)) + cur_length_byte) & (1 << pos)) >> pos;
result = 1
При todo = 0, pos = 1, length = 9, cur_length_byte = 1
Yandex
Объявления
22.04.2012, 15:24     Побитовый сдвиг
Ответ Создать тему
Опции темы

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