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

0xff00 zapis 16-stkowy

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
0 głosów
376 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,020 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,020 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 (155,140 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 3,135 wizyt
0 głosów
0 odpowiedzi 1,537 wizyt
pytanie zadane 7 stycznia 2018 w C i C++ przez must Bywalec (2,980 p.)
0 głosów
0 odpowiedzi 237 wizyt

93,190 zapytań

142,205 odpowiedzi

322,040 komentarzy

62,518 pasjonatów

Advent of Code 2024

Top 15 użytkowników

  1. 2817p. - dia-Chann
  2. 2769p. - Łukasz Piwowar
  3. 2759p. - Łukasz Eckert
  4. 2738p. - CC PL
  5. 2704p. - Tomasz Bielak
  6. 2678p. - Łukasz Siedlecki
  7. 2666p. - rucin93
  8. 2485p. - Marcin Putra
  9. 2418p. - Michal Drewniak
  10. 2367p. - Adrian Wieprzkowicz
  11. 2317p. - Mikbac
  12. 2239p. - Michał Telesz
  13. 2156p. - Anonim 3619784
  14. 1733p. - rafalszastok
  15. 1628p. - Dominik Łempicki (kapitan)
Szczegóły i pełne wyniki

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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...