Отрицание битов

Код ниже дает вывод -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;
}

-6

Решение

~ Оператор инвертирует все биты в операнде. Вот, x начинается как 0. Итак, предполагая int имеет ширину 4 байта и имеет следующее двоичное представление:

00000000 00000000 00000000 00000000

Когда все биты инвертированы, вы получите:

11111111 11111111 11111111 11111111

Предполагая двоичное представление в виде дополнения целых чисел, значение этой битовой последовательности равно -1. Обратите внимание, что если вы добавите 1 к этому значению, все биты станут 0 (т.е. -1 + 1 = 0).

Напротив, значение -2147483647 имеет следующее представление:

10000000 00000000 00000000 00000001
2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector