Предупреждение, которое вы видите, является предупреждением времени компиляции.Теперь вы можете ясно видеть, что ваша int b
- это 32-битная переменная, которая будет переполнена, если смещено влево 97 раз.Так что это действительная проблема.Но компилятор может обнаружить это переполнение только для постоянного числа смен, поскольку оно оценивается во время компиляции, и компилятор сразу же знает, что оно переполнится.
В случае переменного числа смен компилятор недостаточно умен, чтобы знать, какое значение будет иметь int a
, когда дело доходит до сдвига.Итак, компилятор оставляет это на ваше усмотрение.