Elektroda.pl
Elektroda.pl
X
Elektroda.pl
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Układy cyfrowe - pytania podstawowe..

20 Maj 2005 18:00 3734 12
  • Poziom 14  
    Witam.
    Uczę sie UC. Na dzien dobry jedno łatwe pytanie z ktorym nie bardzo sobie radze. Pytan bedzie wiecej.

    Musze zamienic na postac dwójkową liczbe w zapisie heksadecymalnym:
    1A9F


    Dziękuje za pomoc..
    [3.12.2020, webinar] Zagadnienia pomiarowe w nowoczesnej inżynierii materiałowej. Zarejestruj się
  • Użytkownik usunął konto  
  • Pomocny dla użytkowników
    Ogólnie:

    zastępujesz poszczególne cyfry szesnastkowe ich odpowiednikami binarnymi i zapisujesz wynik:

    Code:

    Dziesiętnie  Szesnastkowo   Binarnie

     0                  0           0000
     1                  1           0001
     2                  2           0010
     3                  3           0011
     4                  4           0100
     5                  5           0101
     6                  6           0110
     7                  7           0111
     8                  8           1000
     9                  9           1001
    10                  A           1010
    11                  B           1011
    12                  C           1100
    13                  D           1101
    14                  E           1110
    15                  F           1111


    W drugą stronę postępujesz podobnie:

    - dzielisz liczbę binarną na grupy po 4 cyfry OD PRAWEJ, jezeli ostatnia lewa grupa zawiera mniej niż 4 cyfry to sobie uzupełniasz ją zerami.

    - zastępujesz każdą 4 cyfrową grupę binarną jej odpowiednikiem szesnastkowym
  • Poziom 14  
    Ok. Faktycznie proste.

    F F B C = 15 15 11 12 = 1111 1111 1011 1100
    A B B A= 10 11 11 10 = 1010 1011 1011 1010

    Dobrze!!
    wiem jak zamienic postać szesnastkową(heksadecymalna) na binarną(dwojkową).


    Ale jak zamienic postac heksadecymalna na dziesiętna?
    np.
    ABBA = ?(10)
  • Poziom 34  
    Przecież jest na to wzór. Podał go bardzo mądry człowiek.
    Ale co nas to...

    P.S. 'Początkujący, Laborki, Teoria, Referaty', ale przesadzacie Panowie chiba.
  • Pomocny dla użytkowników
    tel-fan napisał:
    Ok. Faktycznie proste.

    F F B C = 15 15 11 12 = 1111 1111 1011 1100
    A B B A= 10 11 11 10 = 1010 1011 1011 1010

    Dobrze!!
    wiem jak zamienic postać szesnastkową(heksadecymalna) na binarną(dwojkową).


    Ale jak zamienic postac heksadecymalna na dziesiętna?
    np.
    ABBA = ?(10)


    To akurat jest proste jeżeli masz cyfry Hex od H3 do H0 i liczbę w postaci

    $$H_3H_2H_1H_0$$ to wartość dziesiętna wynosi

    $$H_3*16^3+H_2*16^2+H_1*16^1+H_0*16^0$$

    czyli

    ABBAh =10*4096+11*256+11*16+10 = 43962d

    (Przed państwem wystąpi zespół 43962, który piosenką Waterloo wygrał konkurs Eurowizji w 1974. Jednocześnie jest to zespół, którego nazwy ciągle zapominał nasz Papież Jan Paweł II a wierna młodzież płci obojga przypominała mu ją piosenką pt. "Abba Ojcze !". A więc przed Państwem

    Agnetha Faeltskog,
    Bjoern Ulvaeus,
    Benny Andersson i
    Anni-Frid Lyngstad)

    :) :) :)

    Po przerywniku muzycznym wracamy do liczenia.

    8-)

    Gorzej jest w drugą stronę, tj. z dziesiętnego na szesnastkowy:

    można to robić na różne sposoby:

    - pośrednio przez układ binarny (dodając lub nie kolejne wagi tak by uzyskać żądaną liczbę. Jeżeli dana waga (mnożnik) jest dodawany to na danej pozycji wpisujemy 1 jeżeli nie to 0). A potem wynik zamieniamy na hex.

    Przykład

    13=8+4+1=> 1101 => D


    - przez kolejne dzielenie przez potęgi 16

    Przykład

    określamy ilość cyfr potrzebnych do zapisu

    $$N=Int(ln_{16}(x)+0.5)=Int(\frac{log(x)}{log(16)}+0.5)$$

    gdzie

    Int(x) - część całkowita z X (po odrzuceniu ułamka)

    teraz dzielimy liczbę X (dziesiętną) przez 16^(N-1) z resztą z dzielenia czyli zapisujemy X w postaci:

    $$X=H_{N-1}*16^{N-1}+R $$

    $$H_{N-1}=Int(\frac{X}{16^{N-1}}) $$ (****)

    resztę otrzymujemy ze wzoru:

    $$R=X-H_{N-1}*16^{N-1}$$

    jeżeli R jest większe niż 16 to robimy podstawienie X=R i wyliczamy kolejną niższą cyfrę zapisu szesnastkowego ze wzoru (****).
    Jeżeli kolejna reszta jest mniejsza od 16 to wyliczyliśmy już wszystkie cyfry zapisu i ostatnia reszta jest najmłodszą "cyfrą" zapisu. Kolejne liczby-cyfry kodujemy od lewej znakami z zestawu:
    {0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F} i mamy wynik.

    Przykład

    X=47802

    Wyliczamy ilość cyfr:

    $$Int(log_{16}(47802)+0.5)=Int(\frac{ln(47802)}{ln(16)}+0.5)=Int(4.386)=4$$

    Wyliczamy kolejne "cyfry" od najstarszej:

    H3=Int(47802/4096)=11
    R3=47802-11*4096=2746>16 czyli liczymy dalej

    H2=Int(R3/256)=Int(2746/256)=10,
    R2=2746-2560=186>16 liczymy dalej

    H1=Int(R2/16)=11,
    R1=186-11*16=10 <16 czyli H0=R1

    Kodujemy teraz otrzymane "cyfry" (wartości pozycyjne):

    11=B, 10=A

    czyli ciąg

    11,10,11,10 zapisujemy jako BABA, który to zapis jest poszukiwanym zapisem szesnastkowym dziesiętnej liczby 47802.

    **********************************************************

    Ogólnie w danym zapisie N cyfrowym o danej podstawie P kolejne pozycje od prawej do lewej mają wagi (mnożniki):

    $$ P^{N-1},.....,P^3,P^2,P^1,P^0$$

    na danej pozycji może stać cyfra o wartości od 0 do P-1.

    ilość cyfr w danym systemie liczenia potrzebną do zapisu danej liczby dziesiętnej wyznaczamy z wzoru:

    $$N=Int(log_{P}(X)+0.5)=Int(\frac{ln(X)}{ln(p)}+0.5)$$

    gdzie

    N - minimalna ilość cyfr potrzebna do zapisu X w systemie o podstawie P
    P - podstawa liczenia (2,3, 4, ...,8,...,10,...,16,....)

    $$log_P(x)$$ - oznacza logarytm przy podstawie P z X, który możemy obliczyć ze znanego wzoru:

    $$log_P(x)=\frac{ln(x)}{ln(P)}$$


    gdzie

    ln(x) - logarytm naturalny z X (dostępny w kalkulatrze lub tablicach)

    Kolejne cyfry od najstarszej N-1 wyznaczamy z wzoru:

    $$C_{i}=Int(\frac{X}{P^i}+0.5)$$
    $$R_i=X-C_i*P^i$$
    operacje powtarzamy do uzyskania $$R_i<P$$ gdzie wtedy ostatnia reszta jest wartością najmłodszej pozycji liczby.
    Kolejne cyfry kodujemy dostępnym zestawem znaków i wynik gotowy:

    Częściej spotykane systemy liczenia i zapisu

    System dwójkowy

    (używany w komputerach ze względu na prostotę realizacji technicznej układu pamiętającego pojedyńczą cyfrę - jest to przerzutnik dwustanowy gdzie jeden stan przyporządkowano jedynce a drugi zeru. W jeszcze prostszych rozwiązaniach (pamięci dynamiczne) elementem pamiętającym jest kondensator naładowany lub rozładowany):

    P=2, cyfry to 0 i 1, mnożniki od prawej: 1,2,4,8, 16 ....

    System trójkowy (jako ciekawostka)

    P=3, cyfry to 0, 1 i 2, mnożniki od prawej: 1, 3, 9, 27, 81 ...


    System ósemkowy - oktalny

    (był dawniej używany jako krótszy od binarnego, później zaczęto stosować kod szesnastkowy jako oszczędniejszy w zapisie a także bardziej zgodny z systemem zapisu BCD, który również wymagał 4 bitów na cyfrę).

    Tu też jest łatwe przechodzenie pomiędzy oktalnym i binarnym. Grupujemy po 3 bity od prawej i zapisujemy pojedyńczymi cyframi dziesiętnymi wartości 3 bitowe.

    P=8, cyfry od 0 do 7, mnożniki od prawej: 1, 8, 64, 512, 4096,

    System dziesiętny

    P=10, cyfry od 0 do 9, mnożniki od prawej: 1, 10, 100, 1000, ....

    System szesnastkowy (heksadecymalny):

    P=16, cyfry od 0 do 15 (ponieważ nie ma pojedyńczych znaków dla "cyfr" 10 do 15 to oznaczono je kolejnymi literami alfabetu od A do F),
    mnożniki od prawej: 1, 16, 256, 4096, 65536, ....

    Jak widać w systemie szesnastkowym można zapisać liczby na mniejszej ilości pozycji niż w systemie dziesiętnym a do tego łatwo z niego przejść na system binarny i odwrotnie:

    FFFFh=65535
    FFFh=4095
    FF=255
    F=15

    Zapis BCD:

    Cyfry 0 do 9 są zapisywane na kolejnych "paczkach" 4 bitowych. Widać z tego, że nie wszystkie kombinacje są wykorzystane co powoduje, że na tej samej ilości cyfr w systemie szesnastkowym możemy zapisać większe liczby.

    Dla 4 cyfr maksymalna liczba w zapisie BCD równa się 9999 a w szesnastkowym FFFF=65535.
    W komputerach 8 bitowych zwykle pakuje się, dla oszczędności miejsca, po dwie cyfry BCD w jednym bajcie i nazywa to się z angielska "packed BCD"

    I to by było na tyle :).
  • Poziom 1  
  • Poziom 34  
    Paweł, jesteś niemożliwy! Oddałbym Ci wszystkie swoje punkty, ale tych akurat Ci nie brakuje... ;)
    Tel-fan, masz wyjątkową okazję to zrozumieć bez szukania po podręcznikach. Powodzenia!

    P.S. Paweł, a znasz słynną zagadkę 'dlaczego ludzie liczą w systemie dziesiętnym'?
  • Pomocny dla użytkowników
    Nie znam ! Napisz !
  • Poziom 34  
    Bo człowiek ma u rąk 10 palców. ;)
  • Pomocny dla użytkowników
    A stolarz inwalida ? :)
  • Poziom 34  
    Pięć piw dla pracownika tartaku... ;)
  • Pomocny dla użytkowników
    I co telfan odpowiada ?