LINUX.ORG.RU

История изменений

Исправление beastie, (текущая версия) :

Тут вот есть кое-какое объяснение:

http://stackoverflow.com/questions/3871650/gcc-left-shift-overflow

Соль в том, что шифтинг на больше чем «ширина» типа — это u.b., чем многие и пользуются для оптимизаций. В частности используя только 5 младших бита правого аргумента (в частности на i386 и производных). Что мы собственно в твоём случае и наблюдаем.

TL;DR, твой код эквивалентен:

for (i = 0; i <= 64; i++)
    printf("i = %d; x = 0x%08x\n", i, (0x1 << (i & 0xf)));

Исправление beastie, :

Тут вот есть кое-какое объяснение:

http://stackoverflow.com/questions/3871650/gcc-left-shift-overflow

Соль в том, что шифтинг на больше чем «ширина» типа — это u.b., чем многие и пользуются для оптимизаций. В частности используя только 5 младших бита правого аргумента (в частности на i386 и производных). Что мы собственно в твоём случае и наблюдаем.

Исправление beastie, :

Тут вот есть кое-какое объяснение:

http://stackoverflow.com/questions/3871650/gcc-left-shift-overflow

Соль в том, что шифтинг на больше чем «ширина» типа — это u.b., чем многие и пользуются. В частности используя только 5 младших бита правого аргумента (в частности на i386 и производных). Что мы собственно в твоём случае и наблюдаем.

Исходная версия beastie, :

Тут вот есть кое-какое объяснение:

http://stackoverflow.com/questions/3871650/gcc-left-shift-overflow

Соль в том, что т.к. шифтинг на больше чем «ширина» типа — это u.b., чем многие и пользуются. В частности используя только 5 младших бита правого аргумента (в частности на i386 и производных). Что мы собственно в твоём случае и наблюдаем.