 Tutorial [x]
 Date 07 jan 2001r.
 by MaxiBogas / CHInc.
 e-mail: home@alpha.net.pl
 ICQ: 5325323
 Build 002

 Temat: Przeliczanie systemow!
        ~~~~~~~~~~~~~~~~~~~~~~

 `'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'
 Jezeli znajdziesz jakies bledy (a napewno naprodukowalem ich sporo) to daj
 dac znac na maila! :) thx...

 `'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'

 Jak zaczynalem nigdzie nie moglem znalesc informacji na temat jak przeliczac
 systemy, a ludzi ktorzy usilowali mi to wytlumaczyc, poprostu nie rozu-
 mialem. Inni zas mowili po co to wiedziec, kup sobie kalkulator, ktory ma
 przeliczanie systemow, albo uruchom poprostu "calc"...

 [... (: minelo troche czasu i juz wiedzialem jak to zrobic :) ...]

 Aby nikogo nie stawiac przed takim problemem postanowilem napisac teksta
 jak to najlepiej liczyc ;)

 Zaczynamy:

 I. Dziesietny na pozostale
 ^^^^^^^^^^^^^^^^^^^^^^^^^^

 Mamy jakas liczbe w trybie 10-sietnym, np. "23" i chcemy ja zamienic na sys-
 tem 2-klowy (zwanym binarnym). Potrzebny bedzie kawalek kartki i dlugopis i
 rysujemy tabelke:

    23d  | bin
  --------------
         |
         |
         |

 Poniewaz jest to system 2-kowy musimy 23 podzielic na 2. Wyjdzie nam 11,5.
 Skoro jest reszty 5 :) to w kolumnie wpisujemy wartosc 1, jezeli reszty by
 nie bylo wpisujemy 0. Skad sie to wzielo? Przy odwrotnej operacji: 11*2,
 wyjdzie nam 22, czyli brakuje nam 1 do naszej liczby. W trybie binarnym
 mozna robic wlasnie tak jak opisalem wczesniej, czyli reszta to jeden, bez
 reszty 0, w innych systemach bedzie trzeba liczyc na odwrot aby wiedziec
 jaka jest roznica miedzy liczbami, ale o tym pozniej.
 Mamy cosik takiego:

    23d  | bin
  --------------
    11d  |  1
         |

 Teraz dokladnie tak samo, ale na 11d (d - decimal, czyli sys. 10-sietny).

    23d  | bin
  --------------
    11d  |  1 <-|
     5d  |  1 <-|
     2d  |  1 <-|
     1d  |  0 <-|
     /|\        |
      |_________|
 Ostatnia linijka wynika z tego ze 2 dzielone na 2 daje 1 i reszty zero wiec
 pisze 0 z boku :) Teraz jak to odczytac? 10111b (b - binary, sys. 2-kowy)
 Czytamy poprsotu tak jak wyzej strzalki pokazuja. Od dolu w gore, ale pier-
 wsza cyfra zawsze pochodzi z prawej kolumny. Inny przyklad dla utrwalenia:

    64d  | bin
  --------------
    32d  |  0 <-|
    16d  |  0 <-|
     8d  |  0 <-|
     4d  |  0 <-|
     2d  |  0 <-|
     1d  |  0 <-|
     /|\        |
      |_________|

 Czyli: 1000000 :) Teraz pokaze zamiane sys. dziesietnego na szesnastkowy
 (zwany hexadecymalnym). Skoro mamy miec 16 cyfr, a jakos sie tak smiesznie
 przyjelo (pewnie dlatego ze czlowiek ma 10 palcow) jest 10, wiec aby byly
 kolejne uzywa sie liter od A do F: 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F.

 Procedura calkiem podobna tylko tym razem dzielimy na 16 :) Dla przykladu
 wezme liczbe 43 w trybie decymalnym. Teraz dziele ja przez 16 i wychodzi mi
 2,6875. Zapisujemy pod wartosciami DEC (1 kolumna) wynik bez reszty, czli
 2. Teraz bierzemy ta dwojke i mnozymy przez 16 :) Daje man to 32. Sprawdzamy
 ile zostaje reszty, biorac pierwsza liczbe i odejmujac liczbe po wymnozeniu,
 czyli 43-32=11. Ale 11 decymalnie :) w trybie hex 11 znak to B, wiec zapi-
 sujemy B pod kolumna HEX. Teraz z 2 niebardzo uda nam sie cosik zrobic,
 poniewaz jak podzielimy przez 16 wynik bez reszty bedzie 0, a 0 mnozac przez
 cokolwiek nie da nam nic ciekawego ;) Wiec zostawiamy to tak i odczytujemy
 tak jak nizej:

    43d  | hex
  --------------
     2d  |  B<-|
    /|\        |
     |_________|

 Inny przyklad:

   1983d | hex
  --------------
    123d |  F  (bo roznica wyszla 15)
      7d |  B  (bo roznica wyszla 11)

 Wynik: 7BF. Jakie to proste, no nie? Wystarczy zczaic o co chodzi.

 Czyli wyszlo nam 2Bh (h - hex, sys. szesnastkowy).
 Moznemy zrobic sobie inne systemy ktorych w kalkulatorach nie znajdziesz :)
 (pomijajac te z programowaniem ;)) Np. system 22 :) I liczba 2001.

   2001d | sys. 22
  -----------------
     90d |   21 <- litera L
      4d |    2

 Wyszlo: 42L w systemie 22 :)

 Aby troche namieszac wam w glowach, pokaze takze inna metode, ktora
 wlasnie przez przypadek odkrylem ;) hehe...

 Aby szybko na kalkulatorze ktory nie ma mozliwosci zamiany systemow,
 obliczyc np. wartosc dec na hex mozna poprostu wartosc dec pomnozyc razy
 1,6. Skad to sie wzielo? :) a otoz wpadlem na genialny pomysl, aby liczbe
 dziesietna pomnozyc razy 16 (bo chcemy hex) i podzielic na 10 (bo wpisalismy
 dec) i wyjdzie nam :) Aby skrocic to poprostu 16 podzielilem na 10 i wyszlo
 1,6. Makata? Wezmy dec 100 i po wymnozeniu wyjdzie nam 160. 16 => A wiec
 hex = A0h. Mam nadzieje ze jak to przeczytales to wszystko ci sie juz po-
 mieszalo ;) hehe... Kiedys... mowilem ze asembler nie jest dla ludzi, tylko
 maniakow, ktorzy nie maja co robic w domu i jak ten czas szybko leci, juz
 sam pokochalem asemblera. Takze sie nie martw jak nie rozumiesz, potem
 bedziesz sie z tego smiac. ;) lol

 II. Pozostale na dziesietny
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^

 Jak wyglada system dziesietny to kazdy chyba wie :) Ale na wszelki wypadek
 zobrazuje go ponizej:

 Liczba: 12345
 1 * 10000 + 2 * 1000 + 3 * 100 + 4 * 10 + 5 * 1 = 12345

 Otoz w ten sam sposob bedziemy konvertowac inne systemy na dziesietny :)
 Wezmy z systemu binarnego liczbe: 100101011 (tak sobie strzelalem). Jak
 mial bym to wytlumaczyc to by nikt nie zrozumial :) wiec pokaze na przy-
 kladach (teraz moze czesc osob zrozumi ;))


   1   0   0   1   0   1   0   1   1   // nasza liczba specjalnie tak szeroko

   *   *   *   *   *   *   *   *   *   // gwiazdka znaczy razy :)

  2^8 2^7 2^6 2^5 2^4 2^3 2^2 2^1 2^0  // ^ nie oznacza xor tylko potege.

   ||  ||  ||  ||  ||  ||  ||  ||  ||  // || - to znaczy rowna sie :)

  256 +0 + 0 + 32 + 0 + 8 + 0 + 2 + 1  = i tutaj wynik dodawania i koniec.

 Czyli: 299 (decymalnie)

 Hmm, nie wiem czy ktos to zrozumial, ale w asci ciezko jest to pokazac :)
 Chodzi o to ze ostatnia cyfre bierzemy i mnozymy przez ilosc liczb wyste-
 pujacych w systemie do potegi wagi. Waga oznacza pozycje w ktorej znajduje
 sie dana cyfra. Przyklad (1011):

   1   0   1   1
  (3) (2) (1) (0)

 To w nawiasach to waga :) I tak rosnie sobie w lewo... Nastepnie piszemy
 ponizej ile wynosi nasze dzialanie i tak z kazda kolumna poczowszy od prawej
 do lewej. Jak mamy juz wszyskie liczby dodajemy je do siebie i mamy wynik.

 Inny przyklad (110011):

   1   1   0   0   1   1
   *   *   *   *   *   *
  2^5 2^4 2^3 2^2 2^1 2^0
   =   =   =   =   =   =
   32  16  0   0   2   1

 Teraz dodawanie tych liczb: 32 + 16 + 0 + 0 + 2 + 1 = 51 (decymalnie)
 Wynik to: 51.

 Jezeli chcemy zamienic inny system na dziesietny robimy to prawie tak samo.
 Przyklad (FAh - hex):

    F      A
    *      *
   16^1  16^0
    =      =
   F*16   A*1
    =      =
 (15*16) (10*1)
    =
   240  +  10 = 250 :)

 Wniosek: FAhex to 250dec :)

 Teraz zamienie 909h na decimal

  9    0   9
  *    *   *
 256  16   1
 ----------
 2304 +0  +9  = 2313 (decimal)

 I to na tyle jezeli chodzi o ten dzial...

 III. Zamiana roznych systemow na rozne systemy
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

 Ble... W sumie kazdy powinien sie domyslec sam, ale nie bede cham i powiem.
 Jezeli mamy do zamiany tryb hexadecymalny na binarny robimy dokladnie tak
 samo jak wczesniej opisalem. Nalezy poprostu system hexadecymalny zamienic
 na decymalny (rozdzial II) i potem system decymalny na binarny (rozdzial I).

 Przyklad (AAh na binary):

   A      A
   *      *
 16^1   16^0
   =      =
  160  +  10 = 170

  170d | bin
 -------------
   85d |  0
   42d |  1
   21d |  0
   10d |  1
    5d |  0
    2d |  1
    1d |  0

 Wynik (AAh): 10101010b

 Jezeli ci malo to wez i uruchom kalkulator z windowsa i wprowadz sobie jakas
 liczbe i zmien system (w trybie pro.). Oblicz sam i sprawdz czy sie zgadza!