int exp1 = ((1<<31)>>31)<<32 // output changes everytime
int exp2 = ((1<<31)>>31)<<31<<1 // 0

Почему это происходит?

Это может быть вызвано переполнением, но не может понять должным образом.

Я пытаюсь решить эту проблему часами, нужна помощь

(целое число p.s для 32 бит)

0
jwkoo 22 Сен 2018 в 15:53

1 ответ

Лучший ответ

Сдвиг на весь размер шрифта или более является неопределенным поведением, поэтому может случиться что угодно (это происходит из-за того, что многие инструкции сдвига архитектур в этих случаях ведут себя странно). Разделение смены на две части помогает решить эту проблему.

3
Matteo Italia 22 Сен 2018 в 12:58