számok leírására szolgáló rendszer From Wikipedia, the free encyclopedia
A számrendszer (avagy számábrázolási rendszer) egy olyan konvencionális szimbólum-, illetve szabályrendszer, amely meghatározza a számok leírásának, ábrázolásának módját. A számrendszerek jelölési rendszerek, hasonlóan az ábécékhez.
A számjegyek olyan szimbólumok csoportja, amelyekkel különböző számok írhatóak le. A számjegyek éppen úgy különböznek az általuk leírt számtól, mint a betűk a belőlük felépülő szótól. Például a "11", "XI" és "tizenegy" jelsorozatok különböznek, de ugyanazt az értelmet hordozzák (egy számot, mennyiséget írnak le).
Egy számrendszer egységes szabályok alapján meghatározza, hogy bizonyos számjegyekből képzett sorozatok milyen számokat jelenítenek meg. A használt ábrázolási rendszer meghatározza, hogy például a "11"-et binárisan háromnak, decimálisan tizenegynek, vagy éppen hexadecimálisan tizenhétnek kell érteni stb. Ezt a számrendszer alapszáma határozza meg.
Egy számrendszer elvárt jellemzői:
Például a mindennapjainkban használt tízes alapú (decimális) számábrázolással leírható az összes racionális szám, minden ilyen számhoz számjegyek egy véges sorozatát rendeli, megadja az alapvető aritmetikai műveletek szabályait (összeadás, kivonás, szorzás és osztás), illetve meghatároz egy algoritmust a számláláshoz. Ugyanakkor a számértékek és számábrázolások közti megfeleltetés nem egyértelmű kölcsönösen, hiszen például a 10-et leírhatjuk többféleképpen (de bármely más számot is): "10"; "10,0"; "10,00"; "10,000" stb. Ettől függetlenül a decimális számrendszer megfelelő (tudjuk, hogy a 0-s tizedesjegyek a számok végéről elhagyhatóak).[1]
A legegyszerűbb számrendszer az egyes számrendszer, unáris számrendszer, amelyben minden természetes számot megfelelő számú szimbólummal ábrázolnak. Ha a megjelenítésre a ′ szimbólumot választjuk, akkor például a 7-es szám a következőképpen jeleníthető meg: ′′′′′′′. Ilyenkor az 1-et ′ jelöli, a 0-t pedig az üres karaktersorozat (vagyis a szimbólum hiánya). Az unáris rendszer jól használható kisebb számok esetén. A számítástechnika néhány területén, például az Elias gamma kódolásnál, valamint az adattömörítési algoritmusok esetében gyakran használt számrendszer.
Az unáris számábrázolás rövidebbé tételéhez gyakran használnak további szimbólumokat, amelyek nagyobb értékeket jelölnek – gyakran a 10 különböző hatványait (10, 100, 1000 stb.). Ezzel eljutunk egy másik számrendszer-típushoz. Például, ha ′ jelenti az 1-et, - jelenti a 10-et, és + a 100-at, akkor a számok tömörebb formában ábrázolhatóak, pl. +++′′′′ lesz a 304 és +--′′′ lesz a 123. Ezzel már egy másik számrendszer-típusohz jutunk. Az ókori egyiptomiak ehhez hasonló számábrázolási rendszert használtak, a római számrendszer is ennek egy módosítása.
Napjainkban ezeknél gyakrabban használnak olyan rendszereket, amelyekben külön speciális rövidítéseket alkalmaznak az egymásután ismétlődő szimbólumok helyettesítésére. Például ha az angol ábécé első 9 betűjét használjuk a többszörös előfordulások rövidítésére (A jelenti az egyszeres előfordulást, B jelenti a kétszeres előfordulást, és így tovább), akkor a korábban +++′′′′ formában ábrázolt 304-es számot most C+D′ formában írhatjuk, a 123-at pedig +--′′′ helyett A+B-C′ alakban.
Még elegánsabbak a helyiértékes számrendszerek. Ezek b alapú számrendszerek, ahol b egy 1-nél nagyobb természetes szám. Egy b alapú helyiértékes számrendszer pontosan b darab különböző szimbólumot (számjegyet) használ.
A mindennapjainkban legelterjedtebb az arab számrendszer, azaz a helyiértékes b=10-es alapú, avagy decimális számrendszer, ami a 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 számjegyeket használja. Amikor ezekből alkotunk számokat, a felsorolásban a jegyek ún. alaki értéke szerepel, egy számjegy tényleges értéke (helyiértéke) azonban attól is függ, hogy a számjegysorozat hányadik pozícióján áll. A helyiértéket úgy kapjuk, hogy az alaki értéket megszorozzuk az alapszám (vagyis a 10) egy pozíciótól függő hatványával. A számjegysorozat alkotta szám értéke pedig ezen helyiértékek összege lesz. Például: a 304-ben szereplő alaki értékek 3, 0 és 4, ezek helyiértékei 3×100, 0×10 és 4×1, és ezek összegeként áll elő maga a 304 (3×100 + 0×10 + 4×1 = 304). Meg kell jegyezni, hogy a zéró (0), amelynek használatára az előzőekben említett rendszerekben nem volt szükség, itt alapvető fontosságú, mivel lehetővé teszi egy nagyságrend kihagyását („átugrását”).
A 10-es alapú számrendszer mellett a legelterjedtebb alkalmazása a kettes (bináris) és tizenhatos (hexadecimális) számrendszereknek van – mindkettő elsősorban az informatika, programozás és egyéb számítógéppel kapcsolatos területeken bír nagy jelentőséggel.
A alapú helyiértékes számrendszerek a 10-es számrendszer 0-tól 9-ig terjedő számjegyei közül az első b darabot használják, tehát például a bináris számrendszer csak a 0-t és az 1-et.
A alapú helyiértékes számrendszerek rendszerint használják a 0–9 számjegyeket, a szükséges további 10-b szimbólumot az angol ábécé egymást követő nagybetűi (vagy ritkábban kisbetűi) adják. Tehát például a hexadecimális számrendszer által használ szimbólumok a 0–9 számjegyek és az A–F betűk.
A helyiértékes számrendszerekben a természetes számok egyértelműen ábrázolhatóak. Az ábrázolás kiterjeszthető a véges tizedestörtek halmazára két további szimbólum, egy negatív előjel (-) és egy ún. tizedesvessző (,) bevezetésével (sok országban a tizedesvesszőt tizedespont helyettesíti). Amennyiben 0-nál kisebb számot akarunk ábrázolni, a negatív előjel közvetlen a számjegysorozat előtt kell megjelenjen. Ha nem egész számot akarunk ábrázolni, az egésznél kisebb részek a tizedesvessző után kell megjelenjenek. Ilyen módszerrel véges szimbólumsorozattal bármelyik véges tizedestört ábrázolható.
A közvetlen tizedesvessző előtti jegy (az egyes helyiértéken álló számjegy) helyiértéke önmaga, a közvetlen előtte álló jegy helyiértéke alaki értékének a b-szerese, az azelőtt álló jegy helyiértéke alaki értékének b2-szerese és így tovább. A közvetlen tizedesvessző utáni jegy helyiértéke alaki értékének a b-ed része, az azutáni jegy helyiértéke alaki értékének b2-ed része és így tovább. Ezeket figyelembe véve felírható egy általános matematikai formula adott b alapszámú helyiértékes számrendszerben ábrázolt számokra.
Megjegyzendő, hogy a racionális számok is leírhatóak véges szimbólumsorozattal, amennyiben a tiszta szakaszos és vegyes szakaszos tizedes törtek ábrázolásának céljából bevezetünk még egy szimbólumot: a zárójelpárt. Az irracionális számok nem ábrázolhatóak helyiértékes számrendszerekben véges számú szimbólum segítségével, tehát a helyiértékes számrendszerek nem elegendőek a valós számok maradéktalan ábrázolásához. A számítógépeken működő lebegőpontos számábrázolás a szükségszerű adatvesztést igyekszik a lehetőségekhez mérten minimális mértékűre csökkenteni.
Az aritmetikai műveletek is sokkal egyszerűbbek a helyiérték-rendszerekben, mint az előzőekben megismert, ún. additív számrendszerekben, ugyanis az additív rendszerek elméletileg végtelen számú különböző szimbólumot kell, hogy használjanak a 10 különböző hatványainak ábrázolásához, míg a helyiérték-rendszerben ehhez elegendő 10 különböző szimbólum (10-es számrendszert feltételezve).
A számítástechnika néhány területén egy módosított helyiérték-rendszert használnak, az ún. k alapú helyiérték-rendszert, amit bijektív számrendszernek neveznek, melyben a használható számjegyek az 1, 2, …, k (k ≥ 1), és a nullának egy üres karaktersorozat string felel meg. Ez a módszer biztosítja a bijekciót minden számjegyekből álló string halmaza és a nem-negatív egészek halmaza között, és elkerülhetővé teszi a nem-egyértelműséget a vezető nullák használata esetén. A bijektív k-alapú számrendszert k-adik jelölésnek is nevezik, de ez nem tévesztendő össze az un. p-adikus számokkal. A bijektív 1-es alapú rendszer megegyezik az unáris rendszerrel.
A történelem előtti időkben a számokat fából vagy kövekből faragott „pálcikák” reprezentálták. A kőkorszaki kultúrákban, ideértve az ősi amerikai indián csoportokat, a pálcikákat lovak, szolgák, személyes szolgáltatások adás-vételénél, illetve szerencsejátékoknál használták.
A legelső írott emlékeket a pálcikák használatáról a sumerek hagyatékai között találták, agyagtáblákba karcolták, amelyeket később néha kiégettek. A sumerek a kissé különleges, a 10-es, 12-es és 60-as alapú számrendszer kombinációját használták az asztronómiai és egyéb számításaiknál. Ezt a rendszer átvették és az asztronómiában használták az ősi mediterrán nemzetek (akkádok, görögök, rómaiak és egyiptomiak). A rendszer maradványait könnyen felismerhetjük a mai idő- (órák, percek) és a szögmérésben (szögpercek).
Kínában, a katonák és a gazdálkodók már a maradékokat is használták a számításaikban (prímszámok). A csapatok számának, illetve a rizs mennyiségének méréséhez a pálcikák egyedi kombinációi szolgáltak. A számításokat kényelmesebbé tette a moduláris aritmetika, ami megkönnyítette a szorzást. A moduláris aritmetika használata egyszerűvé tette a számításokat. A moduláris aritmetikát ma a digitális jelfeldolgozás használja.
A Római Birodalomban a pálcikákat viaszba vagy kőbe karcolták, vagy papiruszra írták és a számok ábrázolására a görögöktől átvett rendszert használták, de egyes számokra saját jeleket vezettek be. A római számrendszer használata a helyiérték-rendszer bevezetése előtt (1500-as évek) általános volt.
A közép-amerikai maja kultúra egy 20 vagy 18 alapú számrendszert használt, ismerték már a helyi értékeket és a nulla fogalmát. Nagyon pontos asztronómiai számításokat végeztek, különösen az év hosszával és a Vénusz pályájával kapcsolatban.
Az Inka Birodalom kiterjedt gazdaságirányítási rendszert működtetett kipu, ahol pálcikák helyett színes fonalakra kötött csomókat használtak. A csomók és színek használata a spanyol hódítók a 16. században történt megjelenésével feledésbe merült, ennek ellenére egy kipuhoz hasonló, egyszerű jelzésrendszer még ma is használatos az Andok területén.
Néhány szerző azt feltételezi, hogy a helyiérték-rendszert széles körben az abakusz használatával a kínaiak terjesztették el. Az első írásos emlékek a pálcikákról, illetve az abakusz használatáról 400 körüliek. A kínai matematikusok a nullát csak 932 körül írták le.
Indiából, ahol már ismerték a modern helyiértékes rendszert, valószínűleg egy Indiába küldött követ által, egy 773 körül vásárolt asztronómiai táblázat közvetítésével jutott el a rendszer az arabokhoz. A rendszerek részleteit lásd arab számok és indiai számok.
A iszlám fejedelmek és Afrika, valamint az India közötti élénk kereskedelem juttatta el az indiaiak által használt rendszert Kairóba. Az arab matematikusok kibővítették az általuk addig használt rendszert a decimális hatványokkal, amit al-Hvárizmi a 9. században már írásban rögzített. A rendszerrel Európát Fibonacci a Liber Abaci 1201-ben, Spanyolországban megjelent munkájában ismertette meg, lefordítva az arab forrást. Így Európába a 12. században jutott el arab közvetítéssel a nullával kiegészített teljes indiai rendszer.
A 2-es alapú bináris rendszert már a 17. században Gottfried Leibniz ismertette, aki Kínában hallott róla, de általános használata a 20. században, a számítógépek megjelenésével terjedt el.
Manapság a 10-es alapú számrendszer a legelterjedtebben használt számrendszer. Feltehetően a rendszer elterjedtségének az az oka, hogy az embereknek tíz ujjuk van (kezükön).
A 8-as alapú rendszert az észak-kaliforniai yuki indiánok találták ki, akik feltehetőleg az ujjak közét is használták a számláláskor. Vannak nyelvészeti bizonyítékok, amelyek alapján feltehető, hogy a bronzkorban korai indo-európaiak (akiktől a legtöbb európai és indiai nyelv ered) helyettesíthették az addig használt 8-as alapú rendszert (ami csak a 8-ig történő számlálást engedte meg) a 10-es alapú rendszerrel. Bizonyíték erre, hogy az angol nyelvben ekkor merül fel a 9-et jelentő, newan, mint ami az 'új'at jelentő 'new', newo szavakból származik, feltehetőleg a nemrégen kitalált 9-es számot úgy nevezték el 'új szám'nak (Mallory & Adams 1997). (Franciául a neuf szó máig is egyaránt jelent 9-et és 'új'at.)
A maja, valamint a pre-kolumbiai és közép-amerikai civilizációk 20-as alapú számrendszereket használtak, (ennek eredete feltehetőleg összefügg az emberek kéz- és lábujjainak számával). A 60-as alapú rendszert a sumér és az azt követő mezopotámiai kultúrák használták, de mint túlélőt, a ma használt időmérő rendszerben is ezt a rendszert használjuk (egy órát 60 percre osztunk, illetve 1 percet 60 másodpercre). A 60-nak, mint alapszámnak a használata azzal magyarázható, hogy elég nagy szám, ugyanakkor meglehetősen sok osztója van, különösen igaz ez az első hat természetes számra, illetve sok törzstényezője van. A 12-es számrendszer nagyon népszerű volt, mert a 12 maradék nélkül osztható 2-vel (felezhető), 3-mal (harmadolható), 4-gyel (negyedelhető), 6-tal (hatodolható). A ma használt naptárban az év 12 hónapra oszlik, átlagosan 12 óra a nappal és 12 óra az éjszaka. Csaknem minden nyelvben külön szó van a 12 dologból álló csoportra, például a magyar „tucat”, az angol „dozen”, a német „das Dutzend”, az olasz „dozzina”, az orosz „djuzsina” stb.
A kapcsolók/relék (és elektronikus követőik, az elektroncsövekből, majd később a tranzisztorokból álló kapcsolóáramkörök) csak két állapotúak lehetnek : „nyitottak” és „zártak”. A nyitott=1 és a zárt=0 helyettesítéssel (vagy fordítva) nyerjük a bináris számjegyek sorozatát. (A tranzisztorok esetében a feszültségekre gyakran használatos a magas és az alacsony kifejezés a 'be' és 'ki' helyett). A bináris rendszer az alapja a digitális számítógépek működésének. Ezt a számrendszert használja csaknem minden digitális számítógép az egészekkel való aritmetikai műveleteknél, kivéve néhány, a kezdetekben használt egzotikus 3-as és 10-es alapú számítógépet. A számítógépek nem minden tárolt adatot értelmeznek számnak – van, amit szövegnek, van, amit programnak értelmeznek. Valós számokat (amelyek közé az egészek is tartoznak) általában lebegőpontos számokként tárolnak és dolgoznak fel, amelyekre külön műveleti szabályok vonatkoznak, ez az ún. lebegőpontos aritmetika.
A múltban és ma leggyakrabban használt számrendszerek alapszámai a 2, 3, 4, 5, 6, 8, 10, 12, 16, 20 és 60.
Egy b alapú számrendszerben (ahol b egy pozitív természetes szám), a b-t a számrendszer alapszámának nevezzük, a rendszerben használható szimbólumok (számok) pedig az első b természetes szám, ideértve a nullát is. (10-es ill. annál kisebb alapszám esetén a 0,1,2,…9 közül értelemszerűen, tizenhatos alapszám esetén a fentiek még kiegészülnek az A,B,C,D,E,F „számokkal”). A szám legutolsó pozíciójában a szimbólumok saját értéküket alaki érték képviselik, ettől a pozíciótól balra az értéküket a b-vel való szorzatuk határozza meg.
Például, a decimális rendszerben (10-es alapszám), a 4327 szám a következőt jelenti (4×103) + (3×102) + (2×101) + (7×100), megjegyezzük, hogy 100 = 1.
Általában, ha b a számrendszer alapja, a számot a a1bk + a2bk-1 + a3bk-2 + … + ak+1b0 formában fejezzük ki, a szám számjegyeit a1a2a3 … ak+1 sorrendben írjuk le. A használt számjegyek a természetes számok, 0 és b-1 között, ez utóbbit is ideértve.
Szövegben (mint itt) a számokat tetszőleges számrendszerben írhatjuk le, de a ez többértelműséghez vezet, ezért (önmagában 10-es alapot, decimális ábrázolást tételezzünk fel) alsó indexként (subscript) a szám jobb oldalánál tüntessük fel az ábrázolásnál használt alapszámot, mint például itt: számalapszám. Speciális környezet említése nélkül, a számok jelzés nélküli ábrázolása megegyezés szerint 10-es alapút, decimálist jelent.
A helyiértékes ábrázolási rendszerben vessző (10-es alapú számrendszerben tizedesvessző) a számjegyeket két csoportja osztja, egész és tört részre. Például, a 2-es alapú 10,11 szám jelentése 1×21+ 0×20 +1×2−1 +1×2−2 = 2,75.
Általánosan, egy b alapszámú számrendszerben a számok a következő formában írhatók le:
A bk és b-k számok a "k"-adik pozícióhoz tartozó ún. nagyságrendek.
Megjegyezzük, hogy a számok vagy egy számjeggyel, vagy egy ismétlődő számjegycsoporttal zárulnak, ami akkor és csak akkor igaz, ha a szám racionális; ez független a számrendszer választott alapszámától. Az viszont alapszámfüggő, hogy az adott racionális számot milyen számrendszerben ábrázoljuk: a 0,310 ábrázolása esetén egy számmal zárul, míg ugyanez a 0,3 bináris ábrázolásban 0,0100110011001…2 már ismétlődő számjegycsoporttal zárul. Egy irracionális nemismétlődő (végtelen számú nemismétlődő) számjeggyel írható le, és ez igaz bármilyen egész alapszám használata esetén is. Példa erre, hogy a pí = 3,1415926…10 2-es alapú számrendszerben szintén a nemperiodikus 11,001001000011111…2 formában írható le.
Ha b=p, azaz prímszám, definiálhatók olyan p-alapú számok ezek, amelyeknek a bal oldala végtelen, ezek az ún. p-adikus számok.
A pozitív alapú számrendszerek mellett még léteznek negatív alapú számrendszerek is, ahol az alapszám egy alkalmas negatív szám.
Egy egyszerű algoritmus segítségével átválthatók a pozitív egész számok egyik számrendszerből a másikba. Az algoritmus maradékos osztások ismételt alkalmazását írja elő. Az algoritmus minden lépése után a következő lépésben a kapott hányadost osztjuk tovább, egészen addig, míg a hányados 0 lesz. Ekkor az osztási maradékok összeolvasva adják az új számrendszerben a számot (vagyis a szám alaki értékét).
Például 1020304 10-es számrendszerbeli szám 7-es számrendszerbe váltása:
1020304 = 145757 · 7 + 5 145757 = 20822 · 7 + 3 20822 = 2974 · 7 + 4 2974 = 424 · 7 + 6 424 = 60 · 7 + 4 60 = 8 · 7 + 4 8 = 1 · 7 + 1 1 = 0 · 7 + 1 => 11446435
Például 10110111 2-es számrendszerbeli szám 5-ös számrendszerbe váltása:
10110111 / 101 = 100100 maradék 11 (3) 100100 / 101 = 111 maradék 1 (1) 111 / 101 = 1 maradék 10 (2) 1 / 101 = 0 maradék 1 (1) => 1213
Egy lehetséges megvalósítása az átváltásnak C nyelven, a program kevesebb, mint 1023 jegyű számot tud átváltani 2-től 36-os alapig:
#include <stdio.h>
#include <string.h>
int main() {
int alap,ujalap,jo,st,i,temp,elojel,jegy[1024],ujjegy[1024];
int hossz,ujhossz,maradek;
char szam[1024];
while(1) {
printf("Szamok konverzioja szamrendszerek kozott (alap=2..36)\n");
printf("Kerem az alapot: "),scanf("%d",&alap);
printf("Kerem az uj alapot: "),scanf("%d",&ujalap);
if((alap<2)||(alap>36)||(ujalap<2)||(ujalap>36)) printf("Rossz alap/ujalap!\n");
else {
printf("Kerem az atvaltando szamot (A=10,B=11,...,Z=35): "),scanf("%s",szam);
jo=1;
hossz=strlen(szam);
if(szam[0]=='-') elojel=-1,st=1;
else if(szam[0]=='+') elojel=1,st=1;
else elojel=1,st=0;
for(i=st;i<hossz;i++) {
if((szam[i]>='0')&&(szam[i]<='9')) jegy[i-st]=szam[i]-'0';
else if((szam[i]>='A')&&(szam[i]<='Z')) jegy[i-st]=szam[i]-'A'+10;
else jo=0;
if(jegy[i-st]>=alap) jo=0;
}
if(jo==0) printf("Ervenytelen input!\n");
else {
hossz-=1+st;
for(i=0;2*i<=hossz;i++)
temp=jegy[i],jegy[i]=jegy[hossz-i],jegy[hossz-i]=temp;
ujhossz=0;
do {
maradek=0;
for(i=hossz;i>=0;i--) {
maradek=maradek*alap+jegy[i];
jegy[i]=maradek/ujalap;
maradek%=ujalap;
}
ujjegy[ujhossz]=maradek;
ujhossz++;
while((hossz>=0)&&(jegy[hossz]==0)) hossz--;
} while(hossz>=0);
printf("Atkonvertalt szam: ");
if(elojel==-1) printf("-");
for(i=ujhossz-1;i>=0;i--) {
if(ujjegy[i]<10) printf("%d",ujjegy[i]);
else printf("%c",ujjegy[i]-10+'A');
}
printf("\n");
}
}
printf("\n");
}
return 0;
}
A decimális törtrészek konverziója ismételt szorzással oldható meg. A szorzat egész része a megfelelő jegy. Sajnos, az eljárás automatikusan nem minden alapszám esetén fejeződik be. Pl a 0,1A4C hexadecimális (16-os alapú) szám 9-alapúvá alakítása esetén:
0,1A4C · 9 = 0,ECAC 0,ECAC · 9 = 8,520C 0,520C · 9 = 2,E26C 0,E26C · 9 = 7,F5CC 0,F5CC · 9 = 8,A42C 0,A42C · 9 = 5,C58C => 0,082785...
Egyes speciális esetekben az átváltás különösen egyszerű a következő módszerrel: Ha az a alapú számrendszerben írt n számot egy b=ah alapú számrendszerbe írjuk át, akkor a számjegyeket az egyesektől kezdve h hosszú részekre osztjuk, és az egyes részek helyett a neki megfelelő számjegyet írjuk.
A másik irányban az egyes b alapú jegyek helyett azok a alapú alakjait írjuk.
A módszer akkor is működik, ha az átírandó szám nem egész.
Például
3 | 0 | 2 | 1 | 0 |
11 | 00 | 10 | 01 | 00 |
vagyis 302104 = 11 00 10 01 002.
és
001 | 010 | 111 | 100 |
1 | 2 | 7 | 4 |
ezért 10101111002 = 12748
Bizonyítás:
Legyen az átírandó szám
Osszuk h hosszú részekre:
Itt , és az egy-egy tagban levő összeg éppen a b alapú számrendszer egy-egy jegyének a számrendszerbeli alakja.
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.