poniedziałek, 28 kwietnia 2014

Systemy liczbowe

W kolumnowym obrazie systemu liczbowego podstawą systemu jest mnożnik, przez który należy pomnożyć wartość znajdująca się w kolumnie z prawej strony. W naszym systemie o podstawie 10 wartość każdej kolejnej kolumny jest dziesięciokrotnie większa od wartości kolumny z prawej strony. Każdy system liczbowy ma zestaw własnych symboli cyfrowych. Liczba tych symboli równa jest wartości podstawy systemu.  W żadnym systemie cyfrowym liczba równa podstawie systemu nie może być wyrażona jedną cyfrą. Każda kolumna ma wartość określoną przez liczbę stanowiącą podstawę systemu podniesioną do potęgi równej porządkowemu numerowi kolumny minus jeden. Wartość w pierwszej kolumnie otrzymujemy podnosząc podstawę systemu do potęgi 1 - 1 (kolumna jednostkowa ponieważ każda liczba podniesiona do potęgi zerowej ma wartość 1). Druga kolumna ma wartość podstawy systemu podniesioną do potęgi 2 - 1 (kolumna ma wartość wielkości podstawy systemu) itd. Cyfra znajdująca się w każdej kolumnie wskazuje ile razy wartość danej kolumny jest zawarta w całej liczbie. Np. jeżeli, biorąc pod uwagę system ósemkowy, w kolumnie czwartej znajduje się wartość 6 to jest to informacja, że wartość kolumny jest zawarta sześciokrotnie w wartości ósemkowej całej liczby, a jej wartość do 8 do potęgi 4 - 1 czyli 512 (512 jest zawarta sześciokrotnie w całej liczbie).

Potęgi liczby 16:
  • 16^2 = 256,
  • 16^3 = 4096,
  • 16^4 = 65536,
  • 16^5 = 1048576,
  • 16^6 = 16777216.
Tabela konwersji dwójkowej na ósemkową i odwrotnie:
  • 000 dwójkowo to 0 ósemkowo,
  • 001 dwójkowo to 1 ósemkowo,
  • 010 dwójkowo to 2 ósemkowo,
  • 011 dwójkowo to 3 ósemkowo,
  • 100 dwójkowo to 4 ósemkowo,
  • 101 dwójkowo to 5 ósemkowo,
  • 110 dwójkowo to 6 ósemkowo,
  • 111 dwójkowo to 7 ósemkowo.
Tabela konwersji dwójkowej na szesnastkową:
  • 0000 dwójkowo to 0 szesnastkowo,
  • 0001 dwójkowo to 1 szesnastkowo,
  • 0010 dwójkowo to 2 szesnastkowo,
  • 0011 dwójkowo to 3 szesnastkowo,
  • 0100 dwójkowo to 4 szesnastkowo,
  • 0101 dwójkowo to 5 szesnastkowo,
  • 0110 dwójkowo to 6 szesnastkowo,
  • 0111 dwójkowo to 7 szesnastkowo,
  • 1000 dwójkowo to 8 szesnastkowo,
  • 1001 dwójkowo to 9 szesnastkowo,
  • 1010 dwójkowo to a szesnastkowo,
  • 1011 dwójkowo to b szesnastkowo,
  • 1100 dwójkowo to c szesnastkowo,
  • 1101 dwójkowo to d szesnastkowo,
  • 1110 dwójkowo to e szesnastkowo,
  • 1111 dwójkowo to f szesnastkowo.
Przykłady:
  • system dwójkowy:
    • dwójkowy na dziesiętny: 10101101 dwójkowo to 173 dziesiętnie bo (1 * 2^7) + (0 * 2^6) + (1 * 2^5) + (0 * 2^4) + (1 * 2^3) + (1 * 2^2) + (0 * 2^1) + (1 * 2^0) = 173,
    • dwójkowy na ósemkowy: liczbę dwójkową dzielimy grupy po 3 bity idąc od prawej do lewej (jednak kolejność w jakiej zapisujemy jest taka jak kolejność bitów w liczbie dwójkowej), a brakujące bity uzupełniamy zerami i odczytujemy z tabeli wartości odpowiadające, przykładowo: liczba dwójkowa 10101101 ma 3 grupy tj. 010, 101 i 101 co odpowiada liczbie ósemkowej 255, 
    • dwójkowy na szesnastkowy: liczbę dwójkową dzielimy na grupy po 4 bity idąc od prawej do lewej (jednak kolejność w jakiej zapisujemy jest taka jak kolejność bitów w liczbie dwójkowej), a brakujące bity uzupełniamy zerami i odczytujemy z tabeli wartości odpowiadające, przykładowo: 10101101 ma 2 grupy tj. 1101 i 1010 co odpowiada liczbie szesnastkowej da,
  • system ósemkowy:
    • ósemkowy na dwójkowy: każdą cyfrę z liczby ósemkowej zamieniamy według na tabeli na odpowiadającą jej wartość dwójkową i tak liczba ósemkowa 255 to 010101101 dwójkowo,
    • ósemkowy na dziesiętny: 1105 ósemkowo to 581 dziesiętnie bo (1 * 8^3) + (1 * 8^2) + (0 * 8^1) + (5 * 8^0) = 581,
    • ósemkowy na szesnastkowy: zamieniamy na dziesiętny i następnie na szesnastkowy,
  • system dziesiętny:
    • dziesiętny na dwójkowy: 173 % 2 = 1, 86 % 2 = 0, 43 % 2 = 1, 21 % 2 = 1, 10 % 2 = 0, 5 % 2 = 1, 2 % 2 = 0, 1 % 2 = 1, a więc 173 dziesiętnie to 10101101 (od tyłu),
    • dziesiętny na ósemkowy: 100 / 8 = 12 (reszta 4), 12 / 8 = 1 (reszta 4), 1 / 8 = 0 (reszta 1), a więc 100 dziesiętnie to 144 ósemkowo (odczytujemy reszty od tyłu),
    • dziesiętny na szesnastkowy: 39345 / 4096 (największa potęga liczby 16 mniejsza niż liczba, z której przeliczamy) = 9 reszta 2571, 2571 / 256 (kolejna potęga liczby 16) = 10 reszta 11, 11 / 16 = 0, 11 / 1 = 11, a więc 39345 dziesiętnie to 9a0b szesnastkowo,
  • system szesnastkowy:
    • szesnastkowy na dwójkowy: każdą cyfrę z liczby szesnastkowej zamieniamy według tabeli na odpowiadającą jej wartość dwójkową i tak liczba szesnastkowa 9a0b to 1001101000001011 dwójkowo,
    • szesnastkowy na ósemkowy: zamieniamy na dziesiętny i następnie na ósemkowy,
    • szesnastkowy na dziesiętny: 9a0b szesnastkowo to 39435 dziesiętnie bo (9 * 16^3) + (a * 16^2) + (0 * 16^1) + (b * 16^0) = (9 * 4096) + (10 * 256) + (0 * 16) + (11 * 1) = 39545.
Literatura: Duntemann J., Zrozumieć Asembler, Translator S.C., 1994