[C++] System heksadecymalny i liczby ujemne

Witam :slight_smile:

Jeśli jest kod:

signed int d = 0xff00;


cout << d;

Po skompilowaniu wyświetla się liczba 65280 czyli 0xff00. Ale jeżeli damy:

signed short int d = 0xff00;


cout << d;

Wyświetli się liczba -256 , bo signed short int przechowuje liczby dodatnie do 32767. No właśnie, ale czego wyświetliła się akurat liczba -256, a nie np. 32767 - czyli możliwie największa jak na ten typ. Zatem na jakiej zasadzie to działa :?:

Pozdro :wink:

U2

0xff00

po zamianie na system dwójkowy to:

1111 1111 0000 0000

Jeżeli tą liczbę interpretujesz jako liczbę ze znakiem w systemie U2

no to wyjdzie właśnie -256.

Aby sprawdzić jaką liczbę ze znakiem przedstawia kod binarny trzeba zanegować każdy bit a potem dodać jedynkę, czyli zawsze się spełnia warunek:

-X==(~X)+1

signed int d = 0xff00;

~d == 0x00ff;

(~d)+1 == 0x0100; czyli 256 :smiley: