Zdravím,
rád bych vás poprosil, jestli by mi někdo dokázal objasnit, jak funguje bitový doplněk. Hledal jsem všude možně po internetu, ale stále mi není jasné, jak funguje.
Příklad:
#include <iostream>
#include <climits>
using namespace std;
int main() {
int n = 0;
long long m;
cout << LLONG_MAX << endl; // 9223372036854775807
m = ~n;
cout << m; // -1
return 0;
}
Mám proměnnou n typu int a zabírá tedy 4 byte v paměti, což je 32 bitů. Hodnota n je 0, takže by n
mělo být uložené jako:
00000000 00000000 00000000 00000000
Bitový doplněk z n pak tedy bude:
11111111 11111111 11111111 11111111
V decimální soustavě je to číslo 4 294 967 295, které by se to typu long long mělo "vejít". Přesto program vypisuje hodnotu -1.
Podle pozorování výstupů jsem usoudil, že:
~n = -n - 1
ale podle vysvětlení, která jsem našel na internetu by toto nemělo platit, proto vás prosím o radu.
Zkoušeno v GCC i MSVC.
Díky