Co to jest system szesnastkowy i dlaczego jest tak często wykorzystywany w komputerach? Wiem, że komputery używają zer i jedynek do przechowywania danych, więc dlaczego używamy wartości szesnastkowej?
terminology
hexadecimal
Justin Krejcha
źródło
źródło
Odpowiedzi:
Szesnastkowy to system liczbowy, który jest bardzo powszechny w obliczeniach. Być może słyszałeś już o binarnym , który ma tylko 1 i 0.
Ludzie używają głównie systemu dziesiętnego (podstawa 10), w którym mamy 10 cyfr:
Chociaż komputery nie działają w systemie dziesiętnym. Mają stan binarny (coś jest prawdą lub fałszem) i dlatego działa w bazie 2 (liczby binarne są zwykle poprzedzone 0b), a jedynymi cyframi są 0 i 1.
Wcześniej używano ósemki (lub podstawy 8). Było dobrze, ponieważ „10” w bazie 8 to „0b1000” w systemie binarnym (10 w systemie dziesiętnym to 1010 w systemie binarnym). Podczas zapisywania liczb ósemka zwykle ma przedrostek „0o” (ale w większości języków programowania ma przedrostek „0”). Nazywa się to base 8, ponieważ mamy osiem cyfr.
Oktal jest nadal używany, głównie przy ustawianiu uprawnień w systemach Unix i Linux
Z biegiem czasu potrzebowaliśmy łatwiejszego sposobu przedstawiania większej liczby, ponieważ moc obliczeniowa i przestrzeń szybko rosły. Stało się standardem używania szesnastkowego lub podstawowego 16, ponieważ 16, podobnie jak 8, jest potęgą 2, co ułatwia konwersję cyfr po cyfrze (patrz ten komentarz . Ponieważ jest 16 cyfr, dla których użyto liter inne cyfry. Ponadto, hex jest zwykle poprzedzony 0x.
Liczby szesnastkowe są również przydatne, ponieważ liczba szesnastkowa to 4 bity (1 liczba ósemkowa może reprezentować 2), a zatem dwie liczby w bajcie. W większości edytorów szesnastkowych tak jest reprezentowany bajt.
Rachunkowość
W bazie 10 mamy 10 cyfr. Po 9, co robimy? Brakuje nam cyfr. Tworzymy miejsce „dziesiątki” po lewej stronie oryginalnej liczby, mają one wartość 1, a skrajna prawa staje się 0. To samo dzieje się również w systemie szesnastkowym:
Dopóki nie dojdziemy do 0x1F, a następnie proces powtarza się do 0xFF (255 w systemie dziesiętnym), a następnie otrzymujemy 0x100. Więcej informacji na temat liczenia można znaleźć tutaj .
Oto wykres przedstawiający konwersje między liczbami dziesiętnymi, szesnastkowymi, ósemkowymi i binarnymi:
źródło
0
przedrostka, a nie0o
liczb ósemkowych.System szesnastkowy jest systemem numeracji bazowej 16, który używa 16 cyfr (
0123456789ABCDEF
), w przeciwieństwie do binarnego, który używa 2 (01
) lub dziesiętnego, który używa 10 (0-9). Ponieważ w naszym systemie jest tylko 10 cyfr (w naszym systemie), litery od A do F służą zamiast tego do opisania „cyfry 10”, „cyfry 11” itd.16 to potęga 2, która ułatwia konwersję liczb szesnastkowych na liczby binarne i, jak zauważyłeś, „komputery używają zer i jedynek do przechowywania danych”. Ponieważ każda cyfra przechowuje dokładnie 4 bity danych, cyfrę szesnastkową można bardzo łatwo przekonwertować na 4 cyfry binarne (1 bit) i odwrotnie.
Reprezentowanie dużych liczb jest łatwiejsze niż binarne. Tylko dwie cyfry szesnastkowe mogą reprezentować 256 różnych wartości, jak w:
Cztery cyfry szesnastkowe mogą reprezentować 65536 wartości i tak dalej. Hex znacznie ułatwia inspekcję danych za pomocą zrzutu heksadecymalnego , ponieważ litery, cyfry i znaki interpunkcyjne są przechowywane w formacie, który odwzorowuje każdy znak na liczbę od 0 do 256 (nazywaną ASCII lub czasami przy użyciu innych kodowań). Ponadto wiele innych formatów plików (takich jak PNG) jest dostosowywanych tak, aby każda informacja, z której składa się plik, zawiera 256 bitów.
Podsumowując, 16 to potęga 2, a 256 to potęga 16. To dobry sposób na przedstawienie zarówno liczb binarnych, jak i tekstu lub innych danych.
źródło
Co to jest system szesnastkowy?
Jeśli masz liczbę abcd, oznacza to, że ((a * + b) + c) + d. To jest jak:
W systemie szesnastkowym potrzebujesz 16 cyfr, ale mamy tylko dziesięć cyfr (0..9). Zatem dla brakujących 6 cyfr używane są znaki A..F z A = 10, ..., F = 15.
Oczywiście możesz również pomyśleć o wielu innych systemach liczbowych, na przykład o podstawie 5 lub 7.
Do obliczeń z liczbami nie ma znaczenia, jakiej bazy używasz. Możesz dodawać i mnożyć w systemie binarnym, możesz to robić w systemie dziesiętnym i możesz to robić w systemie szesnastkowym. Jesteśmy przyzwyczajeni do obliczania w systemie dziesiętnym, komputery robią to w systemie binarnym.
Dlaczego system szesnastkowy jest tak często wykorzystywany w informatyce?
Jak wspomniano powyżej, nie ma znaczenia, w którym systemie liczbowym podajesz numer. Podstawowa liczba jest taka sama, zmienia się tylko reprezentacja. Komputer zawsze wewnętrznie przechowuje i używa (np. Oblicza z) liczb w formacie binarnym.
Dlaczego więc programiści (jak ja) używają różnych systemów liczbowych? Istnieją dwa powody, aby wybrać system liczbowy oparty na potędze 2. Pierwszy to krótkość, a drugi to dobry widok, które bity są ustawione.
Krótkość
Jeśli mam funkcję, która zapisuje zawartość bufora na konsoli, mógłbym napisać kod drukowany w systemie dziesiętnym, który składa się z 1 do 3 cyfr (dziesiętnie: 0..255). Jeśli piszę liczbę w formacie binarnym, otrzymam od 1 do 8 cyfr (binarnie: 0..11111111). Mógłbym również użyć systemu ósemkowego i skończyć z 1 do 3 cyfr (ósemkowy: 0..377) lub szesnastkowy z 1 do 2 cyfr (szesnastkowy: 0..ff).
To był tylko jeden bajt. Załóżmy teraz, że chcesz zapisać liczbę 32-bitową:
Jak widać, dane szesnastkowe są najkrótsze.
Widzę bity
Częstym wzorem przechowywania informacji w pakiecie jest użycie każdego bitu w bajcie osobno. Weźmy na przykład atrybuty pliku (patrz MDSN ). Chcesz atrybuty „ukryte”, „archiwum”, „tylko do odczytu”, „tymczasowe” i inne. Możesz przechowywać każdy atrybut w jednym bajcie lub możesz spakować informacje do jednego bajtu (lub wielu bajtów), gdzie każdy bit reprezentuje dokładnie jeden atrybut. Jeśli spojrzysz na dwFlagsAndAttributes w artykule MSDN, zobaczysz, że Windows używa tego wzorca.
Pozostając na stronie MSDN, weźmy
FILE_ATTRIBUTE_ENCRYPTED
jako przykład, ta flaga ma wartość dziesiętną 16384 i szesnastkową 0x4000. Wiodące „0x” to tylko konwencja programisty C do oznaczania liczb szesnastkowych, więc popatrzymy na 4000. Kiedy chcesz wiedzieć, które bity są ustawione, najpierw musisz przekonwertować 16384 na binarne - nic, czego nie możesz zwykle robi to z arytmetyką mentalną. Ale weźmy szesnastkowy 4000. To całkiem proste. 16 to 2 * 4, więc każda liczba szesnastkowa to dokładnie 4 bity. Dlatego właśnie konwertujemy 4 na binarne 0100 i zera na binarne 0000 i gotowe.Często nie chodzi o poszczególne bity, ale programiści mają tendencję do dopasowywania rzeczy do potęg 2. Liczymy, że programy ładujemy nie na losowy adres, ale na adres z 16 najmniej znaczącymi bitami ustawionymi na zero. W ten sposób, jeśli masz adres 0x12345678, możesz łatwo zobaczyć, że ten adres należy do programu załadowanego do 0x1234, a nie do tego załadowanego do 0x03810000.
Wolisz binarny, ósemkowy czy szesnastkowy?
To kwestia smaku. Jeśli chcesz bezpośrednio zobaczyć bity, binarne może być w porządku. W przypadku długich liczb binarny może być frustrujący, jeśli trzeba policzyć cyfry, aby sprawdzić, czy ustawiony jest bit 23 lub bit 24. Jest to łatwiejsze w systemie szesnastkowym, ponieważ każda cyfra reprezentuje 4 bity, więc masz mniej liczenia. Osobiście rzadko używam ósemki. To jest bardzo rzadkie.
Ale dlaczego nie użyć bazy 32?
Baza 32 to potęga 2, to świetnie. Ale potrzebujesz 32 cyfr, takich jak 0..9, A..V. Jest to o wiele więcej cyfr do zapamiętania (czy możesz łatwo zauważyć, na którą liczbę „S” zareaguje?). Kolejnym zastrzeżeniem jest to, że z bazą 32 tracisz fajną cechę, że dwie cyfry szesnastkowe są dokładnie jednym bajtem, co jest bardzo przydatne, jeśli spojrzysz na zawartość pamięci! Również w przypadku bazy 32 nadal potrzebujesz 2 cyfr do reprezentowania wartości, które może mieć jeden bajt. W przypadku wartości 32-bitowej potrzebujesz tylko 7 cyfr zamiast 8 cyfr szesnastkowych, ale to nie tyle żyć z wadami podstawowego systemu 32.
źródło
Różne stosowane obecnie systemy reprezentacji liczb (= obejmują):
binarne, ósemkowe, dziesiętne i szesnastkowe.
Wybór jednego z nich zależy często od łatwości użycia do danego zadania.
binarny jest używany w systemach komputerowych i ogólnie technologii cyfrowej, ponieważ łatwo jest reprezentować w elektronice; funkcje liczb bazowych 2 są łatwe do zbudowania, podobnie jak reprezentacja on / off, true / false lub innych podobnych powtarzających się informacji dwustanowych.
octal miło jest mieć, jeśli istnieją grupy trzech cyfr binarnych, np. jak w ustawieniach uprawnień w systemach Unix / Linux.
pomijam na chwilę dziesiętną, szesnastkowa jest ładna w taki sam sposób jak ósemkowa, ale dla czterech cyfr binarnych, a fakt, że 8 bitów, jeden bajt, ładnie pasuje do dwóch cyfr szesnastkowych. ( = odpowiedź )
Z tego wynika, że nawet 8-bitowe grupy w komputerze można łatwo zapisać, przedstawić i zrozumieć - to znaczy; bardzo wygodny w codziennym użytkowaniu podczas pisania oprogramowania, obsługi danych (np. wartości kolorów rgb w HTML / CSS), tworzenia struktur danych i wszystkiego podobnego.
dziesiętny . Można się domyślić, że system dziesiętny rozwinął się z faktu, że mamy dziesięć palców u rąk i nóg. Pojedyncza cyfra oznacza liczbę zliczonych elementów, po jednym na każdy palec do maksymalnie dziesięciu.
Reprezentują one systemy liczbowe o podstawie:
2, 8, 10 i 16.
Ogólnie rzecz biorąc, podstawa mówi, ile jednocyfrowych „elementów” można policzyć, np. Dwójkowy ma dwa, dziesiętny ma dziesięć.
Ponieważ liczba szesnastkowa zawiera 16 pozycji jednocyfrowych, system wymaga 16 „cyfr”, dlatego używa 0-9 i af (6 dodatkowych, w porównaniu do dziesiętnych), gdzie „a” równa się 10, a „f” równa się 15 w systemie dziesiętnym.
Aby kontynuować w trybie ogólnym: każda podstawowa 2 lub wyższa działa tak samo jak cokolwiek innego, o ile masz ładną reprezentację jednocyfrową.
Liczby dziesiętne tworzą:
dla liczby dziesiętnej „dcba” - d, c, b, a, wybrany z 0123456789
Teraz zmień to na:
i masz bardziej ogólną formę, która pokazuje, jak działa jakakolwiek podstawa 2 lub wyższa;
np. pięciocyfrowa podstawa 5 może być tak samo wygodna jak dowolna z pozostałych powyżej, lub dlaczego nie 12-cyfrowy (jeden tuzin) system czasu (12 godzin = „10” podstawa 12, z pierwszym „dziesiętnym” informującym, który 1/12 [5 minut] godziny)
Uwaga: ⁰¹²³ - indeks górny 0123, jeśli ekran pokazuje coś innego
źródło