Сдвиги
От: McSeem2 США http://www.antigrain.com
Дата: 13.07.06 22:11
Оценка:
Вопрос не вполне по C++, а скорее по железу, но все-таки.

Коллега неожиданно обнаружил. Что напечатает следующая программа?
#include <stdio.h>
int main()
{
    unsigned sh = 0x2F;
    unsigned v = 1u << sh;
    printf("%u", v);
}


Ответ: 32768, что есть "1 << (sh & 31)". Сдвиг на 32 дает единицу.
При этом, в окне отладчика значение выражения "1<<sh" равно нулю. v = 1<<0x2F тоже дает ноль. Получается неувязочка. Как стандарт регламентирует поведение сдвигов? Или это считается HW dependent?

Просьба к тем, у кого есть под руками PPC, Sun, HP, SGI и прочие железяки — как там?
Так же интересно, как оно работает на Java и C# (ни того ни другого под руками нет).

Разумеется, речь идет о платформах с 32-битовыми интами.
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.