Obsah

Digitální informace


Celý čísla (integer)

Nezáporný celý číslo (unsigned integer):

Číslo lze ukládat buď jako "little endian" (LE, od nejnižšího bajtu k nejvyššímu) nebo jako "big endian" (BE, od nejvyššího bajtu k nejnižšímu).
Procesor podporuje little endian.

32-bitový slovo ve formátu little endian má bity v tomhle pořadí:

7 6 5 4 3 2 1 0    15 14 13 12 11 10 9 8    23 22 21 20 19 18 17 16    31 30 29 28 27 26 25 24

Např. číslo 434 = 1B2h = 110110010b se ve skutečnosti uloží jako 10110010, 00000001, 00000000, 00000000 (B2 01 00 00).

32-bitový slovo ve formátu big endian má bity v tomhle pořadí:

31 30 29 28 27 26 25 24     23 22 21 20 19 18 17 16     15 14 13 12 11 10 9 8     7 6 5 4 3 2 1 0

FormátPříklad: číslo 0x123456 (šestnáctkově)
LE-3256 34 12 00
BE-3200 12 34 56
LE-6456 34 12 00 00 00 00 00
BE-6400 00 00 00 00 12 34 56

Proč se používá little endian? Protože umožňuje jednoduše převejst 8bitovou hodnotu na 16bitovou tím, že vynulujeme horní bajt (zero extend). Stejně tak se převede 16bitová hodnota na 32bitovou nebo 64bitovou.

Záporný celý číslo (negative integer):

Jak spočítáme 106 mínus 9? 106 - 009: 6 - 9 = 7P, 0 - 0P = 0 - 1 = 9P, 1 - 0P = 1 - 1 = 0: 097 = 97.
Teď stejnym zpúsobem 6 - 9: 6 - 9 = 7P, 0 - 0P = 0 - 1 = 9P, 0 - 0P = 0 - 1 = 9P, ...: Dostaneme číslo 999...997, což je -3.

Když odečítáme od menšího čísla větší, dojde k nekonečnýmu přenosu. V matematice nekonečnýmu, ale v počítači se dostaneme k nejvyššímu bitu a pak dojde k přetečení. Toho se využívá při porovnávání dvou čísel: Odečtou se a když dojde k přetečení, tak první bylo menší.

Jestliže ve dvojkový soustavě odečteme od menšího čísla větší, budeme pořád přenášet a dostaneme číslo, kerý bude mít zleva samý jedničky. Takže -1 zapíšeme jako 111...111. Obecně záporný čísla dostaneme tak, že:

  1. Jejich absolutní hodnotu odečteme od nuly
  2. nebo invertujeme všechny bity a přičteme 1.

U zápornejch čísel je vždycky nejvyšší bit 1, proto se mu říká znamínkovej. Kladný čísla v něm mají 0.

Konverze 8bitovýho čísla se znamínkem na 16bitový se provede tak, že se znamínkovej bit zkopíruje do všech bitú vyššího bajtu. (sign extend)

Např. -2 v 8 bitech: 11111110b = 0FEh a v 32 bitech: 0FFFFFFFEh: 11111110, 11111111, 11111111, 11111111 (FE FF FF FF).


Čísla s pohyblivou desetinnou čárkou (float)

Výpočty s těmahle číslama provádí koprocesor. Počítá s přesností na 80 bitú, při přenosu do paměti zaokrouhluje na 32 nebo 64 bitú.

Číslo se skládá ze znamínka (S), exponentu (E) a mantisy (M).

single: 32 bitú

Maximální číslo přibližně 1038.

SEEEEEEE EMMMMMMM MMMMMMMM MMMMMMMM

BityVýznam
bit[31]S - znamínko (sign): 0 + (plus), 1 - (mínus)
bity[30..23]E - exponent: v kódu posunutý nuly: 00000000b = -127, 01111111b = 0, 11111111b = 128
bity[22..0]M - mantisa: bez první cifry, kerá je vždycky 1 kromě případu, kdy má exponent minimální hodnotu

double: 64 bitú

Maximální číslo přibližně 10308.

SEEEEEEE EEEEMMMM MMMMMMMM MMMMMMMM MMMMMMMM MMMMMMMM MMMMMMMM MMMMMMMM

BityVýznam
bit[63]S - znamínko (sign): 0 + (plus), 1 - (mínus)
bity[62..52]E - exponent: v kódu posunutý nuly: 00000000000b = -1023, 01111111111b = 0, 11111111111b = 1024
bity[51..0]M - mantisa: bez první cifry, kerá je vždycky 1 kromě případu, kdy má exponent minimální hodnotu

Znaky (char)

Pro ukládání znakú se používá kód ASCII (American Standard Code for Information Interchange).
Pro ukládání znakú s diakritikou (háčky a čárky) se používají rúzný kódování, sjednotit se to snaží kód UNICODE (mapa znakú, převodník znakú).

Český znaky

Znak Latin II Windows 1250 ISO 8859-2 UTF-16
(Unicode)
UTF-8
(packed Unicode)
áA0E1E100E1C3 A1
č9FE8E8010DC4 8D
ďD4EFEF010FC4 8F
é82E9E900E9C3 A9
ěD8ECEC011BC4 9B
íA1EDED00EDC3 AD
ňE5F2F20148C5 88
óA2F3F300F3C3 B3
řFDF8F80159C5 99
šE79AB90161C5 A1
ť9C9DBB0165C5 A5
úA3FAFA00FAC3 BA
ů85F9F9016FC5 AF
žA79EBE017EC5 BE
Znak Latin II Windows 1250 ISO 8859-2 UTF-16
(Unicode)
UTF-8
(packed Unicode)
ÁB5C1C100C1C3 81
ČACC8C8010CC4 8C
ĎD2CFCF010EC4 8E
É90C9C900C9C3 89
ĚB7CCCC011AC4 94
ÍD6CDCD00CDC3 8D
ŇD5D2D20147C5 87
ÓE0D3D300D3C3 93
ŘFCD8D80158C5 98
ŠE68AA90160C5 A0
Ť9B8DAB0164C5 A4
ÚE9DADA00DAC3 9A
ŮDED9D9016EC5 AE
ŽA68EAE017DC5 BD

Textový řetězce (string)

NULL-TERMINATED STRING (ASCIIZ)

Posloupnost znakú ukončená znakem null.
Tenhle zpúsob ukládání řetězcú používá programovací jazyk C.

Např. řetězec "Ahoj!" se uloží jako  41h, 68h, 6Fh, 6Ah, 21h, 0.

1-BYTE LENGTH STRING

Nultej bajt označuje dýlku, pak následuje posloupnost znakú, jejichž počet je roven dýlce.
Maximální dýlka je 255 znakú.
Tenhle zpúsob ukládání řetězcú používá programovací jazyk Pascal.

Např. řetězec "Ahoj!" se uloží jako 5, 41h, 68h, 6Fh, 6Ah, 21h.

UNICODE STRING

Znak v kódování Unicode múže mít buď konstantní dýlku nebo proměnlivou dýlku.
Proměnlivá dýlka znaku se označuje UTF-8.
Konstantní dýlka znaku múže mít velikost 16 nebo 32 bitú a múže bejt buď ve formátu "little endian" (LE) nebo "big endian" (BE).
O jakej formát se jedná, to se pozná podle speciálního znaku na začátku řetězce, kerýmu se říká "byte order mark" (BOM).

BOM (šestnáctkově)VýznamPříklad: řetězec "Paříž" (šestnáctkově)
FF FEUTF-16 LEFF FE 50 00 61 00 59 01 ED 00 7E 01
FE FFUTF-16 BEFE FF 00 50 00 61 01 59 00 ED 01 7E
FF FE 00 00UTF-32 LEFF FE 00 00 50 00 00 00 61 00 00 00 59 01 00 00 ED 00 00 00 7E 01 00 00
00 00 FE FFUTF-32 BE00 00 FE FF 00 00 00 50 00 00 00 61 00 00 01 59 00 00 00 ED 00 00 01 7E
nic nebo EF BB BFUTF-850 61 C5 99 C3 AD C5 BE

Řetězec v kódu Unicode múže bejt buď null-terminated (pak 0 zabírá 1 bajt (UTF-8), 2 bajty (UTF-16) nebo 4 bajty (UTF-32))
nebo se zadanou dýlkou (kerá zabírá 2 bajty - maximální dýlka 32767, nebo 4 bajty - maximálně 231-1).

UTF-8

Dýlka znaku je proměnlivá. Znaky s ASCII kódem 0-127 zabírají 1 B, zvláštní znaky zabírají až 4 B.

0???????b - znaky s UNICODE 0..127 = ASCII 0..127
110?????b 10??????b - znaky s UNICODE 128..2175
1110????b 10??????b 10??????b - znaky s UNICODE 2176..67711
11110???b 10??????b 10??????b 10??????b - znaky s UNICODE od 67712


Barvy (color)

ARGB (32 bitú, 16 milionú barev, prúhlednost)

A - alpha channel - kanál alfa (číslo 0 až 255 udávající neprúhlednost (opacity) - 0: prúhledná (transparent), 255: plná (opaque))
R - red channel - červenej kanál (číslo 0 až 255 udávající poměr červený složky barvy)
G - green channel - zelenej kanál (číslo 0 až 255 udávající poměr zelený složky barvy)
B - blue channel - modrej kanál (číslo 0 až 255 udávající poměr modrý složky barvy)

16 barev (4 bity, EGA)

0 černá (black)
1 modrá (blue)
2 zelená (green)
3 tyrkysová (cyan)
4 červená (red)
5 fialová (magenta)
6 hnědá (brown)
7 světle šedá (light gray)
8 tmavě šedá (dark gray)
9 světle modrá (light blue)
10 světle zelená (light green)
11 světle tyrkysová (light cyan)
12 světle červená (light red)
13 světle fialová (light magenta)
14 žlutá (yellow)
15 bílá (white)

Obsah