2.1 Tak trochu o číslech

A máš tu další díl o Ruby. Tentokrát si povíme trošku víc o číslech. Jak asi víš, máme a používáme čísla hlavně v desítkové soustavě. Ajaj. Co to vlastně znamená? Tak se ti to, milý Kubo, pokusím vysvětlit. Desítková soustava (dekadická) obsahuje čísla od 0 do 9, a jak jistě víš, má základ s číslem 10. Proč? Asi podle toho, že člověk má 10 prstů – tedy – aspon normální člověk :-) Počítače ale pracují hlavně s dvojkovou soustavou (binární), kde jsou čísla 0 a 1, osmičkovou soustavou – 0 až 7 a šestnáckovou (hexadecimální) soustavou – čísla jsou zapsána v rozsahu 0-9 a A-F.

Abys pochopil číselné soustavy a jak se počítají, uvedu pár příkladů

Desítková soustava

Vezmeme si například číslo 256. Číslo obsahuje 3 číslice, má tedy pozice 2, 1 a 0 .. na 2. pozici je číslo “2”, na 1. pozici je číslo “5”, a na 0. pozici pak číslo “6”. Číslo pozice pak určuje mocninu základu. 2. pozice je tedy 10^2 = 10*10, 1. pozice pak 10^1=10, 0. pozice pak 10^0=1 .. A každou tutu mocninu vynásobíme zapsaným číslem. Číslo je tedy:

Vidíš, že desítková soustava má tedy základ s číslem 10. Pro zápis v Ruby není potřeba nic speciálního, prostě, napíšeš číslo tak, jak je a Ruby pozná, že je to číslo v naší – desítkové – soustavě.

A, koukám, že jsem ti zapomněl říct, co je to to “10^2”. Je to “deset na druhou”. Jinak řečeno druhá mocnina deseti. A ještě jinak řečeno 10^2 je jako 10*10. Stejně tak 10^5 bude 10*10*10*10*10 (deset na pátou). To samé pro ostatní, jak tedy bude 8^3?

Dvojková soustava

Binární soustava je základ pro funkci počítačů. Obsahuje vlastně jen dvě čísla – 0 a 1. Jako žárovka. 0 – nesvítí, 1 – svítí. Říká se tomu “bit”. Jednotka informace. Ukážeme si zase nějaký příklad.  Máme tu binární číslo 0b01010101. Krása. A co s tím teď? Napíšeme si opět pozice. Číslo má osm pozic, opět ta nejvyšší bude jako první. Tzn. 7. pozice (první zleva) bude 2^7, 5. pozice 2^5, 1. pozice 2^1 atd. Napíšu teď všechny pozice tak, jak jdou za sebou a k tomu 0 nebo 1 podle čísla.

Jak vidíš, není to nic složitého. Šestnáctkovou soustavu zvládneš jistě také.

Šestnácková soustava

V programování se často setkáš hlavně s dvojkovou, ale ještě více se šestnáctkovou (hexadecimální) soustavou. A proč? Protože zápis v ní je kratší, hlavně pro větší čísla. A také se z ní mnohem snadněji ručně převádí do dvojkové soustavy. Trošku zvláštní je zápis, kde se kromě číslic 0-9 používají i písmena A-F. Převedeme-li písmeno A do desítkové soustavy, pak A označuje číslo 10. B je 11, C je 12 .. Poznáš, jaké číslo představuje písmeno F?

Zase si ukážeme příklad. Vezmene hexa číslo 0x2A5F a převedeme si ho do desítkové soustavy. Délka čísla je 4 znaky – 4 pozice. První zleva bude opět 16^3, druhá zleva 16^2 atd. Číslo tedy bude:

a teď to zkusíme v Ruby

Hexadecimální čísla se tedy v Ruby zapisují s “0x” na začátku. Podle toho Ruby pozná, v jaké číselné soustavě mu zapisuješ číslo.

A jak převést hexa do binární soustavy? Jde to snadno proto, že šestnáctková soustava je vlastně násobkem dvou. Dvou – jako dvojková – binární soustava. Stačí si pak tedy zapamatovat, jak převést čísla od nuly do 15 (0-F) do dvojkové soustavy, a budeš převádět velice jednoduše.

Příklad. Převeď číslo 0x8A5 do binární soustavy. Víme, že 8 se převede jako 0b1000, A (10) je zase 0b1010 a 5 se převede jako 0b0101 .. pak tedy 0x8A5 do dvojkové soustavy bude jako 0b100010100101 :)

Ověříme v Ruby

Převody mezi soustavami v Ruby

Tak. A teď ti ještě ukážu, jak převádět mezi různými soustavami. K tomu nám poslouží metoda “to_s”, které jako parametr podstrčíme základ soustavy, do které chceme převádět. Tzn. chceme-li převádět do šestnáctkové, dáme 16. Chceme-li do dvojkové, dáme 2.

Převod z desítkové do hexa:

Převod z desítkové do binární:

Převod z dvojkové do hexa

Převod z hexa do dvojkové

Pro převody do desítkové soustavy nepotřebuješ žádnou speciální funkci, Ruby číslo převede hned do desítkové soustavy.

Asi myslím, že už teď máš plnou hlavu čísel, tak to už ukončíme. A trénuj čísla, já si tě pak vyzkouším. :-)

PS: Představ si, že máš číslo 2310 ve čtyřkové soustavě. Převeď mi to do desítkové a do šestnáckové soustavy. Výsledek napiš do komentáře.

Leave a Reply

Your email address will not be published. Required fields are marked *

2 + 8 =