Archiv rubriky: Čísla a znaky

Celočíselné rozsahy

V IT jsou zavedené rozsahy, se kterými se většinou pracuje při práci s celými čísly. V praxi už dnes není tolik důležité se zabývat tím, jaký rozsah vybrat.

28, bajt

28 je bajt (anglicky byte) a to je prostě a jednoduše číslo, které je na fyzické úrovni reprezentované osmi obvody a tudíž osmi bity.

Je to číslo mezi 00000000 a 11111111 což je v desítkové číselné soustavě číslo mezi 0 až 255 ale velmi často je tím myšlen i rozsah mezi 1 až 256.

Bajt se znaménkem se moc nepoužívá. Pokud ano pak se jedná o rozsah -128 až +127.

216

216 se v programovacích jazycích (k těm se dostanu později) často říká short (nebo int16).
Toto je také velmi známý číselný rozsah 0 až 65535 (někdy 1 až 65536)
Pokud jde o záporné číslo, pak se jedná o rozsah -32768 až +32767 ale použití se znaménkem není časté (stejně jako u bajtu).

232

232 je nejčastěji používaný celočíselný rozsah a velice univerzálně se mu říká integer nebo int (nebo int32). Toto je dané tím, že moderní procesory vychází často z x86 instrukční sady, která má 32 bitů a operace s 32 bity jsou v moderních procesorech nejvymakanější a nejrychlejší.

Tento číselný rozsah se nejčastěji používá se znaménkem s rozsahem -2147483648 až +2147483647 (cca -2 miliardy až +2 miliardy). To je dané tím, že tento rozsah stačí pro počítání velké většiny celočíselných hodnot, se kterými počítač operuje pro běžné použití běžnými uživateli.

„Integer“ se bez znaménka se zas tak moc nepoužívá – pak by to bylo číslo mezi 0 až 4294967295 (4 a čtvrt miliardy).

264

264 se často označuje za long (nebo int64). Toto číslo má v desítkové soustavě 20 cifer a pamatuje si ho jenom magor. Avšak stejně jako u integeru, nejčastěji použití je se znaménkem.

word

word označuje nějaký bitový rozsah, záleží na kontextu. word originálně znamená bitový rozsah, s jakým pracuje procesor (v dnešní době 32/64). V moderním programování se to (aspoň co vím) už moc nepoužívá.

Neznámý rozsah

Může se stát, že pracujete s číslem ale nevíte, jaký rozsah v paměti je pro toto číslo rezervovaný. Toto už je v dnešní době celkem exotický problém hlavně díky tomu, že int32/int64 jsou už obrovsky rozšířené standardy používané v drtivé většině všech fyzických zařízení.

Shrnutí

  • V programování při práci s celými čísly vždy pracujete s nějakým konkrétním celočíselným rozsahem.
  • Nejčastější celočíselný typ je int který má rozsah 32 bitů

Záporná čísla

V tuhle chvíli byste měli mít dobrou představu o tom, jak se v počítačích pracuje s celými čísly. Už víte, že počítače jsou signální přístroje, že každý signál si lze představit jako číslo ve dvojkové soustavě které lze převést do desítkové soustavy.

Takže když řeknu, že číslo 42 je ve dvojkové soustavě 101010 tak už víte, o čem mluvím.

Jak ale v počítači vypadá záporné číslo 42?

Jak na negativní čísla?

Řekněme, že máme 1 bajt. Už víte, že 1 bajt = 8 bitů a také, že 8 bitů je číslo v rozsahu 28 nebo od 0 do 255. Od nuly se počítá takto.

0 = 00000000
1 = 00000001
2 = 00000010
3 = 00000011

42 = 00101010

255 = 11111111

Ale co když potřebujete negativní čísla?

Musíte vymyslet jiný „kód“ jakým způsobem se převádí bity (signály v počítači) do celého čísla, které umí být jak kladné tak i záporné!

Znaménkový bit

Jedna možnost je vzít jeden bit zkraje a říct, že reprezentuje plusovou nebo mínusovou hodnotu. Například:

42 = 1|0101010
1 = znaménko +
0101010 = hodnota 42

No a záporné číslo -42 by vypadalo takto.

-42 = 0|0101010
0 = znaménko –
0101010 = hodnota 42

To vypadá jako celkem jednoduché, přímočaré řešení, že?

Má to však problém: kladnou a zápornou nulu.

0 = 1|0000000 …. +0?
0 = 0|0000000 …. -0?

Co se má stát, když sečtete plusovou nulu a negativní nulu? Co když je vynásobíte? Co když vynásobíte kladné číslo zápornou nebo kladnou nulou? Tento způsob se nepoužívá* protože kladná nebo záporná nula nemá reálný základ. Nula je jenom jedna a nemá znaménko.

*(v kapitole o desetinných číslech zjistíte, že to není zas tak úplně pravda)

Dvojkový doplněk

Pokud máte 8 bitový rozsah, tak začátek vypadá úplně stejně, jako kdybyste počítali mezi dvěma číselnými soustavami.

0 = 00000000
1 = 00000001
2 = 00000010
3 = 00000011

42 = 00101010

Ale: jakmile vyplníte všechny bity kromě prvního na 1, uděláte následující.

  • Přičtete k číslu +1
  • Změníte znaménko na mínus
  • Začnete počítat pozpátku

126 = 01111110
127 = 01111111
-128 = 10000000
-127 = 10000001
-126 = 10000010
-125 = 10000011

-1 = 11111111

Souhrn

  • Procesor pracuje s čísly v určitém rozsahu.
  • Pro negativní čísla se může používat znaménkový bit, s ním ale vzniká nesmyslný koncept záporné a kladné nuly, který nemá žádný reálný základ, proto se nepoužívá.
  • Pro reprezentaci záporného celého čísla se používá dvojkový doplněk.

Celá čísla

Celé číslo je z matematiky číslo, které může být buď:

  • přirozené číslo (1, 2, 3 …)
  • nula (0)
  • záporné číslo (-1, -2, -3 ….)

V počítačích se však pracuje s celými čísly pouze dvěma způsoby:

  • celé číslo bez znaménka = (0, 1, 2, 3…) = nerozlišujeme kladná ani záporná čísla (nebo je považujeme pouze za kladná)
  • celé číslo se znaménkem = (…, -2, -1, 0, 1, 2….) = rozlišujeme i znaménko. Toto popíšu až v příští kapitole.

V počítačích jsou celá čísla vždy spojena s nějakým konkrétním bitovým rozsahem. Co to znamená? To znamená, že pokud v počítači pracuješ s jakýmkoliv číslem tak vždycky víš, že toto číslo má vždy nějaké minimum a maximum tzn. to číslo nemůže být menší nebo větší než nějaká konkrétní hodnota.

Příklad:
Řekněme, že chceš uložit do paměti číslo 999. Kolik bitů na takové číslo potřebuješ?

Řešení:
1) Nejdřív musíš převést číslo do dvojkové soustavy.
2) 99910 = 11111001112
3) Teď spočítej cifry výsledku ve dvojkové soustavě
4) Pro uložení čísla 999 potřebuješ minimálně 10 bitů kde minimum je 0 a maximum je 1024 (= 210).

Uložení celého kladného čísla (nebo nuly) je v počítači stejné jako kdybychom převáděli číslo mezi číselnými soustavami. Číslo v příkladu výše 999 se uloží jako 1111100111 což znamená, že v prvních 5 flip-flopech se uloží hodnota 1, v dalších dvou hodnota 0 a v dalších třech hodnota 1.

Pokud v paměti pro tuto hodnotu vymezíme 10 bitů tak to znamená, že nejvyšší číslo, které v tomto prostoru můžeme uložit, je 210 = 1024 a ve dvojkové soustavě to bude 10 jedniček: 1111111111.

Souhrn

  • Počítače pracují buď s celými čísly bez znaménka nebo se znaménkem
  • Celá čísla bez znaménka jsou v paměti uložena přesně tak, jako kdybychom prováděli matematický převod mezi desítkovou a dvojkovou číselnou soustavou.