Számrendszer

A Wikipédiából, a szabad enciklopédiából

A számábrázolási rendszer vagy számrendszer meghatározza, hogyan ábrázolható egy adott szám.

A számjegy egy szimbólum (vagy azok csoportja), ami egy számot ír le. A számjegyek éppen úgy különböznek az általuk leírt számtól, mint egy szó attól a dologtól, amit valójában jelent. A "11" jelek a "tizenegy" és a "XI" különbözőek, de ugyanazt a számot írják le.

Egy számrendszer (vagy számábrázolási rendszer) egységes szabályok alapján meghatározza, hogy számjegyek sorozata milyen számokat jelenít meg. A használt ábrázolási rendszer meghatározza, hogy a "11" számot a a bináris háromnak, vagy a decimális tizenegynek, vagy a hexadecimális tizenhétnek, vagy a használt számrendszer alapszámának függvényében más számnak kell érteni.

Elméletileg egy számrendszernek meg kell határoznia:

  • A használt számok egy csoportjának (pl.. minden egész szám, egészek, vagy valós számok) ábrázolási szabályait;
  • Egy egyedi ábrázolást (vagy ábrázolási szabályt) minden számhoz ;
  • Az aritmetikai (esetleg algebrai) szabályokat.

Például, a leggyakrabban használt decimális számábrázolás minden számhoz egy egyedi, a jegyek egy véges sorozatát rendeli, megadja a megfelelő aritmetikai műveletek szabályait (összeadás, kivonás, szorzás és osztás) illetve meghatároz egy algoritmust a számláláshoz.

Egy helyiértékes számrendszerben, aminek alapszáma b, ennyi szimbólumot vagy számjegyet használnak az első b természetes szám leírására, beleértve a nullát is. A többi szám előállításában a szimbólumok helyének is szerepe van. Az utolsó pozícióban álló számjegy megegyezik a saját értékével, a tőle balra lévő pedig a b alapszámmal meg van szorozva. Ezzel a módszerrel véges számú szimbólummal bármely szám leírható.[1]

A számábrázolási rendszereket gyakran nevezik számrendszereknek, bár ez az elnevezés félrevezető: különböző számrendszerek, például a valós számok rendszere, a komplex számok rendszere, a p-adikus számok stb., nem tartoznak ehhez a fogalomhoz.

A számrendszerek típusai[szerkesztés | forrásszöveg szerkesztése]

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 hetes számot a következő képen jeleníthető meg: ′′′′′′′. 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 ábrázolás rövidebbé tételéhez gyakran használnak speciális szimbólumokat, amelyek különleges jelentéssel bírnak. Ezek a speciális szimbólumok gyakran a 10 különböző hatványait (10, 100, 1000 stb.) jelentik. Így például, ha ′ jelenti az 1-et, a – jelenti a 10-et, és + jelenti a 100-at, akkor a számok tömörített formában a következő képen ábrázolhatók:

a 304 szám +++ ′′′′ a 123 szám pedig + –- ′′′ formában jelenik meg.

A régi egyiptomiak is hasonló rendszerű számrendszert használtak, és a római számrendszer ennek a számábrázolási rendszernek egy módosítása.

Használatosak voltak olyan rendszerek is, amelyekben speciális rövidítéseket használtak a szimbólumok többszörös előfordulása esetén. Például ha az ABC első 9 betűjét használjuk a többszörös előfordulás rövidítésére, akkor A jelenti az egyszeres előfordulást, B jelenti a kétszeres előfordulást, és így tovább. Ebben az esetben az előzőekben +++ ′′′′ formában ábrázolt 304-es számot most C+ D′ formában írjuk le.

Még elegánsabb a helyiértékes rendszer: a világszerte használt 10-es alapú számrendszer csak a 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 számjegyeket használja. A felsorolás egyben a számok un. alaki értéke, a számjegy tényleges értéke helyiértéke attól függ, hogy a szám melyik pozíciójában áll, mert ekkor az alaki érték még megszorzódik a 10 alapszám adott pozíciója szerint hatványával. A 304 = 3×100 + 0×10 + 4. Meg kell jegyezni, hogy a zéró, amelynek használatára az előzőekben említett rendszerekben nem volt szükség, itt alapvetően fontos, mivel lehetővé teszi egy hatvány nagyságrend kihagyását, illetve "átugrását" . A ma világszerte elterjedt arab számrendszer, amely valójában indiai eredetű, a 10-et alapszámnak tekintő helyiértékes rendszer.

Az aritmetikai műveletek is sokkal egyszerűbbek a helyiérték rendszerekben, mint az előzőekben megismert, un. 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 u.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.

Történet[szerkesztés | forrásszöveg szerkesztése]

Lásd még: A természetes számok története és a nulla.

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-és é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.

Alapszámok használata[szerkesztés | forrásszöveg szerkesztése]

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, 12 óra a nappal és 12 óra az éjszaka az év mind a 365 napján. 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 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.

A helyiértékes ábrázolási rendszer[szerkesztés | forrásszöveg szerkesztése]

Egy b alapú számrendszerben (ahol b egy pozitív természetes szám alapszá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 a1a2a3ak+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_na_{n-1}...a_1a_0.c_1c_2c_3...)_b = 
\sum_{k=0}^n a_kb^k + \sum_{k=1}^\infty c_kb^{-k}

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 szám 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 pi = 3,1415926…10 2-es alapú számrendszerben szintén a 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.

Tört alapszámú számrendszerek[szerkesztés | forrásszöveg szerkesztése]

Átváltás különböző számrendszerek között[szerkesztés | forrásszöveg szerkesztése]

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...

Speciális eset[szerkesztés | forrásszöveg szerkesztése]

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 n=n_m n_{m-1} \cdots n_0=\sum_{i=0}^m n_i \cdot a^i.

Osszuk h hosszú részekre:

n=\sum _{i=0} ^{[\frac{m+1}{h}]} ((m_{i+h-1}a^{h-1}+m_{i+h-2}a^{h-2}+ \dots +m_{i}a^0)a^{hi})

Itt a^{hi}=(a^h)^i, és az egy-egy tagban levő összeg éppen a b alapú számrendszer egy-egy jegyének a számrendszerbeli alakja.

Kapcsolódó szócikkek[szerkesztés | forrásszöveg szerkesztése]

Jegyzetek[szerkesztés | forrásszöveg szerkesztése]

  1. David Darling: The Universal Book of Mathematics, John Wiley & Sons, Inc., 2004, p. 224.

Szakirodalom[szerkesztés | forrásszöveg szerkesztése]

  • D. Knuth. The Art of Computer Programming. Volume 2, 3rd Ed. Addison-Wesley. pp. 194–213, "Positional Number Systems".
  • J.P. Mallory and D.Q. Adams, Encyclopedia of Indo-European Culture, Fitzroy Dearborn Publishers, London and Chicago, 1997.
  • Filep László - Bereznai Gyula: A számírás története, 1999, (ISBN 978-963-8347-74-9)

Külső hivatkozások[szerkesztés | forrásszöveg szerkesztése]