Minden számmá alakítható
Az informatikában minden adat számmá alakítandó, mivel a számítógép memóriája alapvetően csak számokat képes tárolni, ill. a mikroprocesszor is csak számokkal képes műveleteket végezni.
A számok eleve számok, az ő átalakításuk nem rejt sok kérdést. Ismerünk egész számokat és valós számokat.
A karakterek számmá alakításának hátterében táblázatok állnak, ahol a karakterekhez számkódok tartoznak.
A szövegek karakterek sorozata, tehát könnyedén számokká alakíthatóak.
A logikai értékek esetében a HAMIS értéket a 0, az IGAZ értéket a nem nulla (általában az 1) jelképezi.
A képeket fel kell bontani pixelpontokra. Egy pixelpont esetében meg kell határozni, hogy a szín kikeveréséhez mennyi VÖRÖS, ZÖLD és KÉK színt kell felhasználni. E három szín színmélységéhez tartozó szám írja le a pixelpont színét.
Hangok tárolásához le kell mérni a hang magasságát és esetleg a hangerőt. Ha ezt elég gyakran (másodpercenként több ezerszer) megtesszük, akkor aránylag jól le lehet írni a hangokat számokkal.
Az egész szám típusok egy típuscsalád, melynek sok tagja van.
A különbség a tagok között az, hogy mekkora számokat képesek tárolni, illetve, hogy képesek-e negatív számokat is tárolni, vagy csak pozitívokat.
Legkisebb egész típusok a byte és sbyte. Az ’s’ előtag itt a ’signed’ szót jelöli, vagyis ’előjeles’. Ez azt jelenti, hogy az sbyte képes előjeles módon tárolni a számokat, így negatív számokat is tárol.
A short és ushort a következő méretkategória. Az ’u’ itt az ’unsigned’ szót jelöli, vagyis az előjel nélküliséget. Ez azt jelenti, hogy a short képes negatív számokat is tárolni, de az ushort már nem.
A leggyakrabban használt méretkategória az int és uint. Az ’u’ itt is az előjel nélküliséget jelöli. Az int nagyjából 9 számjegy hosszú számokat képes tárolni.
A long és ulong típusokat nagyon nagy számok esetén használjuk (19 számjegy). A long képes negatív számot is tárolni, az ulong nem.
A valós számok típuscsaládja elsősorban tört számok tárolására képes, de természetesen képes egész számok tárolására is.
A típusok között különbség a memóriaigényük. Minél több memóriát köt le egy típus, annál nagyobb pontossággal (több számjegy) képes tárolni az adott tört számot. Illetve annál nagyobb számok tárolására képes.
A float típus 7 számjegy pontossággal tárol (ebbe az egész számjegyek is benne vannak).
A double típus (ezt használjuk gyakrabban) viszont 15 számjegy pontossággal tárolja a számokat. Használata során 8 byte helyigény jelentkezik.
A karakter típus egyetlen karakter tárolására képes.
A tárolás során a karakter kódja kerül tárolásra. A kód a kódtáblából származik, amely egy kétoszlopos táblázat, ahol minden karakter mellett szerepel annak számkódja is.
ASCII kódtábla használata esetén egy karakter kódja 1 byte-os szám (0..255) lehet. Ezen kódtáblába sajnos nincs benne az összes magyar ékezetes betű.
UNICODE kódtábla tartalmazza több nyelv (köztük a magyar) összes karakterét. Ebben az esetben már jóval több számkód, így nagyobb számok szükségesek a karakterek azonosítására.
A C# a karakterek kódját UNICODE kódtáblára alapozza, annak az első 65535 karakterét lehet felhasználni. Ekkora számok 2 byte-on férnek el. Így a karakterek 2 byte-on kerülnek tárolásra.
A string (szöveg) típus karakterek sorozata. Minden karakter 2 byte-on kerül tárolásra. Ugyanakkor a karaktersorozat végét is jelölni kell a memóriában. Ezt egy speciális karakter, a nulla kódú karakter jelöli.
Ezért például az ”almafa” string tárolása a memóriában összesen 14 byte (a 6 karakternek 2-2 byte szükséges, vagyis összesen 12 byte, a string végén lévő speciális karakternek is 2 byte).
Logikai típus esetén kétfajta érték, az IGAZ és a HAMIS érték tárolása kerülhet szóba.
Két különböző érték tárolására 1 bit is elég lenne. Ugyanakkor a memóriából adat lekérésekor 1 bitet nem lehet lekérni, a legkisebb egység az 1 byte.
Ezért kissé nagyvonalúan egy logikai érték tárolására 1 byte is van elpazarolva. Egy byte-on 0..255 közötti egész számok tárolhatóak. Megállapodás szerint a 0 jelenti a HAMIS (false) értéket. Minden más érték (de azért jellemzően az 1) jelenti az IGAZ (true) értéket.
Dátum és idő tárolására a DateTime típus használható. Ez már egy összetett adattípus (konkrétan objektumosztály).
A DateTime a dátumot a 0001.01.01 és a 9999.12.31 dátumok között képes ábrázolni oly módon, hogy tárolja, hány darab 100 nanoszekundum telt el a kezdő időpillanattól (0001.01.01 00:00:00) kezdve.
Ebből is következik, hogy a dátum és idő értékek csak 100 nanoszekundum pontossággal írhatóak le.
Ennek a tárolási módnak az előnye, hogy könnyedén lehet két dátum különbségét számolni, illetve könnyedén megvalósítható a dátum és idő növelése 1 órával, stb.
Hátránya, hogy aránylag bonyolult kiszámolni, hogy egy adott egész szám érték melyik év, melyik hó melyik napjának hányadik óráját, percét képviseli.