bin_dec_hex - instrukcja obsługi, opcje, przykłady poleceń


NAZWA

bin_dec_hex - Jak korzystać z notacji binarnej, dziesiętnej i szesnastkowej.

OPIS

Większość ludzi używa dziesiętnego systemu liczbowego. Ten system używa dziesięciu symboli do reprezentowania liczb. Kiedy te dziesięć symboli zostanie zużytych, zaczynają wszystko od nowa i zwiększają pozycję w lewo. Cyfra 0 jest pokazywana tylko wtedy, gdy jest jedynym symbolem w ciągu lub nie jest pierwszym.

Jeśli brzmi to dla ciebie tajemniczo, to właśnie powiedziałem w liczbach:

            0
            1
            2
            3
            4
            5
            6
            7
            8
            9
           10
           11
           12
           13

i tak dalej.

Za każdym razem, gdy cyfra dziewięć jest zwiększana, jest ona resetowana do 0, a pozycja przed (po lewej) jest zwiększana (od 0 do 1). Wtedy liczba 9 może być postrzegana jako 00009 i kiedy powinniśmy zwiększyć wartość 9, resetujemy ją do zera i zwiększamy cyfrę tuż przed 9, aby liczba stała się 00010. Zer wiodących nie zapisujemy, chyba że jest to jedyna cyfra (liczba 0). I oczywiście piszemy zera, jeśli występują w dowolnym miejscu wewnątrz lub na końcu liczby:

"00010" -> " 0010" -> " 010" -> "  10"

ale nie

"  1 ".

To było dość podstawowe, już to wiedziałeś. Dlaczego to powiedziałem? Cóż, komputery zwykle nie reprezentują liczb z 10 różnymi cyframi. Używają tylko dwóch różnych symboli, a mianowicie 0 i 1. Zastosuj te same zasady do tego zestawu cyfr, a otrzymasz binarny system liczbowy:

            0
            1
           10
           11
          100
          101
          110
          111
         1000
         1001
         1010
         1011
         1100
         1101

i tak dalej.

Jeśli policzysz liczbę rzędów, zobaczysz, że to znowu 14 różnych liczb. Liczby są takie same i oznaczają to samo, co na pierwszej liście, po prostu użyliśmy innej reprezentacji. Oznacza to, że musisz znać używaną reprezentację lub, jak to się nazywa, system numeracji lub podstawę. Zwykle, jeśli nie określimy wyraźnie używanego systemu numeracji, pośrednio używamy systemu dziesiętnego. Jeśli chcemy użyć innego systemu numeracji, musimy to jasno zaznaczyć. Jest na to kilka powszechnie stosowanych metod. Jedną z powszechnych form jest zapis 1010(2), co oznacza, że zapisałeś liczbę w postaci binarnej. To liczba dziesięć. Jeśli napiszesz 1010 bez określenia podstawy, liczba zostanie zinterpretowana jako tysiąc dziesięć przy podstawie 10.

W książkach powszechna jest inna forma. Używa indeksów dolnych (małych znaków, mniej więcej między dwoma wierszami). W takim przypadku możesz pominąć nawiasy i zapisać liczbę zwykłymi znakami, po których następuje mała dwójka.

Ponieważ używany system numeracji jest również nazywany podstawą, mówimy o liczbie 1100 o podstawie 2, liczbie 12 o podstawie 10.

W systemie binarnym często zapisuje się wiodące zera. Liczby są zapisywane w seriach po cztery, osiem lub szesnaście, w zależności od kontekstu.

Możemy używać postaci binarnej, rozmawiając z komputerami (…programowanie…), ale liczby będą miały duże reprezentacje. Liczba 65'535 (często w systemie dziesiętnym a ' służy do oddzielania trzycyfrowych bloków dla czytelności) zostałaby zapisana jako 1111111111111111(2), czyli 16 razy większa od cyfry 1. Jest to trudne i podatne na błędy. Dlatego zwykle używalibyśmy innej podstawy, zwanej szesnastkową. Używa 16 różnych symboli. Najpierw używane są symbole z systemu dziesiętnego, następnie kontynuujemy ze znakami alfabetycznymi. Otrzymujemy 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E i F. Wybrano ten system, ponieważ postać szesnastkową można bardzo łatwo przekształcić w system dwójkowy łatwo (i z powrotem).

W użyciu jest jeszcze inny system, zwany systemem ósemkowym. To było bardziej powszechne w dawnych czasach, ale nie jest już używane zbyt często. Ponieważ czasami może się to okazać w użyciu, powinieneś się do tego przyzwyczaić, a my pokażemy to poniżej. To ta sama historia, co w przypadku innych przedstawień, ale z ośmioma różnymi symbolami.

        Binary      (2)
        Octal       (8)
        Decimal     (10)
        Hexadecimal (16)

        (2)    (8) (10) (16)
        00000   0    0    0
        00001   1    1    1
        00010   2    2    2
        00011   3    3    3
        00100   4    4    4
        00101   5    5    5
        00110   6    6    6
        00111   7    7    7
        01000  10    8    8
        01001  11    9    9
        01010  12   10    A
        01011  13   11    B
        01100  14   12    C
        01101  15   13    D
        01110  16   14    E
        01111  17   15    F
        10000  20   16   10
        10001  21   17   11
        10010  22   18   12
        10011  23   19   13
        10100  24   20   14
        10101  25   21   15

Większość używanych obecnie komputerów wykorzystuje ośmiobitowe bajty. Oznacza to, że przechowują jednocześnie osiem bitów. Możesz zobaczyć dlaczego system ósemkowy nie jest do tego najbardziej praktyczny: potrzebowałbyś trzech cyfr do przedstawienia ośmiu bitów, a to oznacza, że musiałbyś użyćjednej pełnej cyfry do przedstawienia tylko dwóch bitów (2+3+3 =8). To jest marnotrawstwo. W przypadku cyfr szesnastkowych potrzebne są tylko dwie cyfry, które są używane w całości:

        (2)      (8)  (10) (16)
        11111111 377  255   FF

Możesz zobaczyć, dlaczego binarny i szesnastkowy można szybko przekonwertować: dla każdej cyfry szesnastkowej są dokładnie cztery cyfry binarne. Weź liczbę binarną: weź cztery cyfry z prawej strony i utwórz z nich cyfrę szesnastkową (patrz tabela powyżej). Powtarzaj to, aż nie będzie już cyfr. I na odwrót: weź liczbę szesnastkową. Dla każdej cyfry zapisz jej binarny odpowiednik.

Komputery (a raczej działające na nich parsery) miałyby trudności z przekonwertowaniem liczby takiej jak 1234(16). Dlatego liczby szesnastkowe są określane z przedrostkiem. Ten przedrostek zależy od języka, w którym piszesz. Niektóre z przedrostków to 0x dla C, $dla Pascala, # dla HTML. Powszechnie przyjmuje się, że jeśli liczba zaczyna się od zera, jest to liczba ósemkowa. Nie ma znaczenia, co jest używane, o ile wiesz, co to jest. Użyję 0x dla szesnastkowego, % dla binarnego i 0 dla ósemkowego. Następujące liczby są takie same, tylko ich reprezentacja (podstawa) jest inna: 021 0x11 17 %00010001

Aby wykonywać działania arytmetyczne i konwersje, musisz zrozumieć jeszcze jedną rzecz. To jest coś, co już znasz, ale być może jeszcze tego nie widzisz:

Jeśli zapiszesz 1234 (bez przedrostka, więc jest to liczba dziesiętna), mówisz o liczbie tysiąc dwieście trzydzieści cztery. W formie formuły:

        1 * 1000 = 1000
        2 *  100 =  200
        3 *   10 =   30
        4 *    1 =    4

This can also be written as:

        1 * 10^3
        2 * 10^2
        3 * 10^1
        4 * 10^0

gdzie ^oznacza potęgę.

Używamy podstawy 10 i pozycji 0,1,2 i 3. Pozycja najbardziej po prawej NIE powinna być mnożona przez 10. Druga od prawej powinna być pomnożona jeden raz przez 10. Trzecia od prawej jest mnożona z 10 razy dwa. Trwa to niezależnie od używanych pozycji.

We wszystkich innych przedstawieniach jest tak samo:

0x1234 będzie

        1 * 16^3
        2 * 16^2
        3 * 16^1
        4 * 16^0

01234 would be

        1 * 8^3
        2 * 8^2
        3 * 8^1
        4 * 8^0

Tego przykładu nie można zrobić dla kodu binarnego, ponieważ ten system używa tylko dwóch symboli. Inny przykład:

%1010 byłby

        1 * 2^3
        0 * 2^2
        1 * 2^1
        0 * 2^0

Łatwiej byłoby przekonwertować go na postać szesnastkową i po prostu przetłumaczyć %1010 na 0xA. Po jakimś czasie można się do tego przyzwyczaić. Nie będziesz już musiał wykonywać żadnych obliczeń, ale po prostu wiedz, że 0xA oznacza 10.

Aby przekonwertować liczbę dziesiętną na szesnastkową, możesz użyć następnej metody. Wykonanie szacunków zajmie trochę czasu, ale będzie łatwiejsze, gdy będziesz korzystać z systemu częściej. Później spojrzymy na jeszcze inny sposób.

Najpierw musisz wiedzieć, ile stanowisk zostanie wykorzystanych w drugim systemie. Aby to zrobić, musisz znać maksymalne liczby, których będziesz używać. Cóż, to nie jest takie trudne, na jakie wygląda. W systemie dziesiętnym maksymalna liczba, jaką można utworzyć z dwóch cyfr, to 99. Maksymalna liczba z trzech: 999. Następna liczba wymagałaby dodatkowej pozycji. Odwróć ten pomysł, a zobaczysz, że liczbę można znaleźć, biorąc 10^3 (10*10*10 to 1000) minus 1 lub 10^2 minus jeden.

Można to zrobić również w systemie szesnastkowym:

        16^4 = 0x10000 = 65536
        16^3 =  0x1000 =  4096
        16^2 =   0x100 =   256
        16^1 =    0x10 =    16

Jeśli liczba jest mniejsza niż 65'536, zmieści się na czterech pozycjach. Jeśli liczba jest większa niż 4'095, musisz użyć pozycji 4. Ile razy możesz odjąć 4'096 od liczby bez schodzenia poniżej zera, to pierwsza cyfra, którą zapisujesz. Będzie to zawsze liczba od 1 do 15 (od 0x1 do 0xF). Zrób to samo dla pozostałych pozycji.

Spróbujmy z 41'029. Jest mniejszy niż 16^4, ale większy niż 16^3-1. Oznacza to, że musimy użyć czterech pozycji. Możemy dziesięć razy odjąć 16^3 od 41'029 bez schodzenia poniżej zera. Zatem najbardziej wysuniętą na lewo cyfrą będzie A, więc mamy 0xA????. Liczba jest zredukowana do 41'029 - 10*4'096=41'029-40'960=69. 69 jest mniejsze niż 16^3, ale nie większe niż 16^2-1. Druga cyfra to zatem 0 i mamy teraz 0xA0??. 69 jest mniejsze niż 16^2 i większe niż 16^1-1. Możemy cztery razy odjąć 16^1 (czyli po prostu 16) i zapisać 4, aby otrzymać 0xA04?. Odejmij 64 od 69 (69 - 4*16), a ostatnią cyfrą jest 5 --> 0xA045.

Druga metoda buduje liczbę od prawej strony. Spróbujmy ponownie 41'029. Podziel przez 16 i nie używaj ułamków (tylko liczby całkowite).

41029/16 to 2564 z resztą 5. Zapisz 5. 2564/16 to 160 z resztą 4. Zapisz 4 przed 5. 160/16 to 10 bez reszty. Dodaj 45 z 0. 10/16 jest poniżej jednego. Zakończ tutaj i dodaj 0xA. Skończ z 0xA045.

To, której metody użyjesz, zależy od Ciebie. Użyj tego, co działa dla ciebie. Używam ich obu, nie będąc w stanie powiedzieć, jakiej metody używam w każdym przypadku, myślę, że to zależy od liczby. Faktem jest, że niektóre liczby będą się często pojawiać podczas programowania. Jeśli liczba jest zbliżona do tej, którą znam, użyję pierwszej metody (np. 32'770, która mieści się w 32'768 + 2 i po prostu wiem, że jest to 0x8000 + 0x2=0x8002).

W przypadku binarnego można zastosować to samo podejście. Baza to 2 a nie 16, a liczba stanowisk będzie szybko rosła. Korzystanie z drugiej metody ma tę zaletę, że bardzo łatwo można zobaczyć, czy należy zapisać zero, czy jedynkę: jeśli podzielisz przez dwa, reszta będzie równa zero, jeśli jest to liczba parzysta, i jeden, jeśli jest to liczba nieparzysta:

        41029 / 2 = 20514 remainder 1
        20514 / 2 = 10257 remainder 0
        10257 / 2 =  5128 remainder 1
         5128 / 2 =  2564 remainder 0
         2564 / 2 =  1282 remainder 0
         1282 / 2 =   641 remainder 0
          641 / 2 =   320 remainder 1
          320 / 2 =   160 remainder 0
          160 / 2 =    80 remainder 0
           80 / 2 =    40 remainder 0
           40 / 2 =    20 remainder 0
           20 / 2 =    10 remainder 0
           10 / 2 =     5 remainder 0
            5 / 2 =     2 remainder 1
            2 / 2 =     1 remainder 0
            1 / 2 below 0 remainder 1

Zapisz wyniki od prawej do lewej: %1010000001000101

Grupuj po czterech:

        %1010000001000101
        %101000000100 0101
        %10100000 0100 0101
        %1010 0000 0100 0101

Konwertuj na szesnastkowy: 0xA045

Pogrupuj %1010000001000101 przez trzy i zamień na ósemkowe:

        %1010000001000101
        %1010000001000 101
        %1010000001 000 101
        %1010000 001 000 101
        %1010 000 001 000 101
        %1 010 000 001 000 101
        %001 010 000 001 000 101
           1   2   0   1   0   5 --> 0120105

        So: %1010000001000101 = 0120105 = 0xA045 = 41029
        Or: 1010000001000101(2) = 120105(8) = A045(16) = 41029(10)
        Or: 1010000001000101(2) = 120105(8) = A045(16) = 41029

Na początku podczas dodawania liczb przekonwertujesz je na ich postać dziesiętną, a następnie po dodaniu z powrotem do pierwotnej postaci. Jeśli często korzystasz z innego systemu liczbowego, zobaczysz, że będziesz w stanie wykonywać działania arytmetyczne bezpośrednio w bazie, która jest używana. W każdej reprezentacji jest tak samo, dodaj liczby po prawej stronie, zapisz cyfrę najbardziej na prawo od wyniku, zapamiętaj pozostałe cyfry i użyj ich w następnej rundzie. Kontynuuj z drugą cyfrą od prawej i tak dalej:

           %1010 + %0111 --> 10 + 7 --> 17 --> %00010001

stanie się

           %1010
           %0111 +
            ||||
            |||+-- add 0 + 1, result is 1, nothing to remember
            ||+--- add 1 + 1, result is %10, write down 0 and remember 1
            |+---- add 0 + 1 + 1(remembered), result = 0, remember 1
            +----- add 1 + 0 + 1(remembered), result = 0, remember 1
                   nothing to add, 1 remembered, result = 1
        --------
          %10001 is the result, I like to write it as %00010001

W przypadku niskich wartości spróbuj wykonać obliczenia samodzielnie, a następnie sprawdź je za pomocą kalkulatora. Im więcej obliczeń wykonasz samodzielnie, tym bardziej przekonasz się, że nie popełniłeś błędów. W końcu będziesz wykonywać obliczenia w innych bazach równie łatwo, jak robisz to w systemie dziesiętnym.

Kiedy liczby staną się większe, będziesz musiał zdać sobie sprawę, że komputer nie nazywa się komputerem tylko po to, by mieć ładną nazwę. Dostępnych jest wiele różnych kalkulatorów, skorzystaj z nich. W systemie Unix możesz użyć bc, który jest skrótem od Binary Calculator. Oblicza nie tylko w systemie dziesiętnym, ale we wszystkich bazach, których kiedykolwiek będziesz chciał użyć (w tym binarnych).

Dla osób z systemem Windows: Uruchom kalkulator (start->programy->akcesoria->kalkulator) iw razie potrzeby kliknij widok->naukowy. Masz teraz kalkulator naukowy i możesz wykonywać obliczenia w systemie binarnym lub szesnastkowym.

AUTOR

Mam nadzieję, że podobały Ci się przykłady i ich opisy. Jeśli tak, pomóż innym, wskazując im ten dokument, gdy zadają podstawowe pytania. Nie tylko uzyskają odpowiedź, ale jednocześnie dowiedzą się o wiele więcej.

Alex van den Bogaerdt