Код ниже дает вывод -1
,
#include <iostream>
using namespace std;
int main()
{
int x=0;
cout<<~x;
return 0;
}
Но когда я делаю следующие изменения, ответ меняется на 4294967295
,
просто хочу знать, что почему в случае int это не дает -2147483647
что 111 …. 32 раза
#include <iostream>
using namespace std;
int main() {
unsigned int x=0;
cout<<~x;
return 0;
}
~
Оператор инвертирует все биты в операнде. Вот, x
начинается как 0. Итак, предполагая int
имеет ширину 4 байта и имеет следующее двоичное представление:
00000000 00000000 00000000 00000000
Когда все биты инвертированы, вы получите:
11111111 11111111 11111111 11111111
Предполагая двоичное представление в виде дополнения целых чисел, значение этой битовой последовательности равно -1. Обратите внимание, что если вы добавите 1 к этому значению, все биты станут 0 (т.е. -1 + 1 = 0).
Напротив, значение -2147483647 имеет следующее представление:
10000000 00000000 00000000 00000001
Других решений пока нет …