Почему int i = 1<<31 == -2147483648 вместо 2147483648?

Я пытался понять побитовую операцию, и, по моему мнению, целое число содержит 32 бита и от 0-й позиции LSB до 31-й позиции MSB, поэтому, если я установлю сдвиг влево с 1 на 31, я думаю, что я должен получить 2^31, и двоичное представление этого будет быть 10000000 00000000 00000000 00000000 так почему я получаю результат как отрицательный? и, пожалуйста, поправьте меня, если я ошибаюсь.

#include<bits/stdc++.h>
using namespace std;
int main(){
    int i=1<<31;
    cout<<i;
    return 0;
}

2 ответа

Целое число - это 32-битный тип данных, и его наиболее значимый бит обозначает знак. (Это 32-й бит)

Поэтому вы получаете отрицательное значение

C++ не определяет поведение программ, которые включают 1<<31.

На другой платформе вы можете получить другой ответ, или ошибку компиляции, или программу, которая форматирует ваш диск, или любое другое поведение.

Другие вопросы по тегам