Поскольку сдвиг влево на 1 на 31 позицию не может быть представлен в виде int
.
Математически, 1 << 31
равно 2 31 или 2147483648
.INT_MAX
в типичной системе (где int
- 32 бита) is one less than that, or
2147483647`.Если арифметическая операция со знаком типа переполняется (дает результат вне результата типа), поведение не определено.(Не думайте, что это обернется. Возможно, но язык не гарантирует этого.)
Если вам нужен тип, который может представлять это значение, вы можете использовать тип без знака, который по крайней мере 32бит в ширину или тип со знаком более 32 бит.unsigned long
или long long
гарантированно будет таким широким.(Язык не гарантирует, что int
имеет ширину более 16 бит, но, скорее всего, он будет 32 в большинстве систем.)