| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Некорректная работа операции сдвига |
| Автор: bsa 4.3.2010, 15:12 | ||||
Я что-то не знаю? |
| Автор: Albor 4.3.2010, 15:41 | ||||
Вот это, второе значение выводит как 0х0
А вот это - как 0х80000000
Получается, что данный глюк происходит из-за переменной Добавлено @ 15:44 Хе, а при y=31 выдаёт 0 |
| Автор: bsa 4.3.2010, 16:27 | ||||
кстати. я в примере ошибся с направлением операции сдвига. Нужно использовать сдвиг вправо в строке 8.
|
| Автор: Albor 4.3.2010, 16:32 |
| Выходит, что без разницы куда сдвигать на у, и так и эдак получается один и тот же результат |
| Автор: borisbn 4.3.2010, 18:44 | ||||
Из стандарта C++
У меня msvc, и ваш код выглядет в ассемблере следующим образом
|
| Автор: bsa 4.3.2010, 20:43 |
| borisbn, цитаты из стандарта достаточно для меня. Спасибо. |
| Автор: xvr 7.3.2010, 16:52 | ||
Интересует код для x = mask << y;. Скорее всего там shl ?,ecx, где в ecx будет загружен y. Насколько я помню, IA32 использует в операциях shl/shr только 5 младших битов ecx. Так что 32 в y(а значит и в ecx) для него эквивалентны 0 |
| Автор: mes 7.3.2010, 17:18 |
| Автор: xvr 7.3.2010, 17:21 | ||
Угу, стандарт тут по этому поводу уже цитировали - behavior is undefined |