On Fri, Aug 21, 2009 at 06:46:05PM +0400, Alexey Pechnikov wrote: > Hello! > > On Friday 21 August 2009 18:15:41 Stanislav Maslovski wrote: > > В том и дело, что результат сдвига при mask = 0 в правой части > > undefined. На моей архитектуре значение всего выражения получается > > 0xffffffff, но на другой архитектуре это выражение может запросто дать > > 0x00000000. Я уже устал повторять, в чем там загвоздка. Читай мои > > письма. > > Да, теперь дошло, что сдвиг на 0 бит допустим, а на 32 - нет. Уже нашел > в сети, что даже в gcc при разных флагах оптимизации результат разный > получается.
Кстати, такой информации мне на глаза не попадалось. На i386 для операции << gcc генерит машинный код, состоящий просто из одной инструкции без всякой дополнительной "обвязки": sall %cl, %eax где число полей сдвига задается в регистре %cl, и роль играют только 5 младших бит этого регистра, отсюда и интересное поведение при %сl > 31. -- Stanislav -- To UNSUBSCRIBE, email to [email protected] with a subject of "unsubscribe". Trouble? Contact [email protected]

