Я пытаюсь получить unsigned
, который будет полностью заполнен (это будет 32 из них в двоичном представлении. Я пытался использовать это:
constexpr unsigned all_ones = (((1 << 31) - 1) << 1) | 1;
, но при компиляции (g ++ onUbuntu) выдает следующую ошибку:
error: overflow in constant expression [-fpermissive]
Что вызывает эту ошибку? Для меня выражение выглядит хорошо, как разобран здесь:
1 = 000...001
<< 31 = 100...000
- 1 = 011...111
<< 1 = 111...110
| 1 = 111...111
Я знаю, что могу получитьтребуемое значение другими способами (например, ~ 0u), но я спрашиваю, почему этот метод не работает.