• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

0xff00 zapis 16-stkowy

Object Storage Arubacloud
0 głosów
295 wizyt
pytanie zadane 26 sierpnia 2019 w Matematyka, fizyka, logika przez soq72630 Nowicjusz (180 p.)
zmienione kategorie 27 sierpnia 2019 przez Patrycjerz
0x00ff to 1111 1111 i logicznie 255 to jest dla mnie zrozumiale, ale dlaczego

0xff00 to -256?
skoro f=15 czyli 1111
co daje 1111 1111 0000 0000

znam ZM, ZU1, ZU2, ale najwidoczniej nie potrafie tego odpowiednio zrozumiec
ps nie wiedziałem do jakiej kategorii to wsadzić, nie widziałem systemów 2,10,16.

2 odpowiedzi

0 głosów
odpowiedź 27 sierpnia 2019 przez tkz Nałogowiec (42,000 p.)

Dlatego, że short ma 16 bitów. Czyli short −32 768 — +32 767 (ze znakiem) lub 0 — +65 535 (bez znaku). Ty masz opcję z znakiem. Ogólnie zaszło takie zjawisko nazywane integer overflow. cpp.sh/2pxbn

0xff00 to jest ogółem 65280 tyle. Ale, short zmieści 32 767. I co zrobi z tym nadmiarem? Zacznie liczyć od "tyłu", czyli od -32768. 65280 - 32 767 = 32513 tyle nam zostaje "reszty", Co z nią dalej zrobi kompilator? Wepchnie do shorta. -32769+32513 = -256. Dlaczego -32769, anie -32768? Dlatego, że -32769 jest liczbą, na której następuję konwersja. -32769 jest równa 32767  w 16 bitowowym zapisie. Wiem, że nie wszystko jest poprawnie semantycznie, ale myślę, że jest przedstawione prosto. 

komentarz 27 sierpnia 2019 przez soq72630 Nowicjusz (180 p.)
(-2^15)= -32 768
2^14+2^13+2^12+2^11+2^10+2^9+2^8 = 16 384 + 8 192 + 4 096 + 2 048 + 1 024 + 512 + 256 = 32 512

skąd wziąłeś 32513?

-32 768 + 32 512 = -256
komentarz 27 sierpnia 2019 przez tkz Nałogowiec (42,000 p.)
Mógłbyś też zrobić tak - 32767+65280, Dlatego, że  to - 32767 jest minimum shorta,

Masz 65280(0xff00), liczba dochodzi do 32 767, "obraca się" i teraz masz -32768( -32769, na tej liczbie następuje przepełnienie)+32513=-256
0 głosów
odpowiedź 27 sierpnia 2019 przez tangarr Mędrzec (154,780 p.)

0x00FF to 255
0xFF00 to 65280
Musisz jednak pamiętać że w komputerze liczby przechowujesz w zmiennych o różnym zakresie.
 

Tabelka zakresów

  liczba ze znakiem liczba bez znaku
1 bajt -128 .. 127 0 .. 255
2 bajty -32768 .. 32767 0 to 65535
4 bajty -2147483648 .. 2147483,647 0 .. 4294967295
8 bajtów -9223372036854775808 .. 9223372036854775807 0 .. 18446744073709551615

Dla liczb ze znakiem połowa zakresu jest przeznaczona na liczby ujemne. Do oznaczania liczby ujemnej służy najstarszy bit.
Pamiętaj aby zawsze dobrać odpowiedni typ danych.

Podobne pytania

0 głosów
3 odpowiedzi 2,877 wizyt
0 głosów
0 odpowiedzi 1,250 wizyt
pytanie zadane 7 stycznia 2018 w C i C++ przez must Bywalec (2,980 p.)
0 głosów
0 odpowiedzi 222 wizyt

92,555 zapytań

141,403 odpowiedzi

319,553 komentarzy

61,939 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...