Левое смещение отрицательного числа не определено для случая вообще, но мы должны понять, почему это неопределенное поведение (UB)? Имейте в виду, что наиболее значимый бит (MSb) является битом знака. Если этот бит равен 1, это число отрицательно. Если он равен нулю, число положительно. Это критическая информация теряется при первой левой смене. Например
-32768<<4
это то же самое, как
0x8000<<4
(предполагается, что на 16 разрядную машину для простоты)
В результате это, конечно, 0, которые на самом деле не имеет никакого смысла и, следовательно, UB.
В конкретном случае вопроса об интервью от ОП имеется только одно конкретное значение, которое мы имеем ... не общий случай. -1 (0xffffffff на 32-битной машине), сдвинутое влево 4 раза, даст 0xfffffff0, как первоначально думал ОП.
Разве это не зависит от представления целых чисел со знаком? – You 2010-11-24 17:46:26
Ну, есть один способ узнать. Скомпилируйте и запустите код, глупый! – cdhowie 2010-11-24 17:46:52
@cdhowie - если вы шутите, это смешно, но, вероятно, не полностью очевидно для OP. Если нет, то позоришься. – 2010-11-24 18:07:55