Čí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.
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).
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át | Příklad: číslo 0x123456 (šestnáctkově) |
---|---|
LE-32 | 56 34 12 00 |
BE-32 | 00 12 34 56 |
LE-64 | 56 34 12 00 00 00 00 00 |
BE-64 | 00 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.
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:
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).
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).
Maximální číslo přibližně 1038.
SEEEEEEE EMMMMMMM MMMMMMMM MMMMMMMM
Bity | Vý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 |
Maximální číslo přibližně 10308.
SEEEEEEE EEEEMMMM MMMMMMMM MMMMMMMM MMMMMMMM MMMMMMMM MMMMMMMM MMMMMMMM
Bity | Vý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 |
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ú).
|
|
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.
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.
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ýznam | Příklad: řetězec "Paříž" (šestnáctkově) |
---|---|---|
FF FE | UTF-16 LE | FF FE 50 00 61 00 59 01 ED 00 7E 01 |
FE FF | UTF-16 BE | FE FF 00 50 00 61 01 59 00 ED 01 7E |
FF FE 00 00 | UTF-32 LE | FF 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 FF | UTF-32 BE | 00 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 BF | UTF-8 | 50 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).
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
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)
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) |