Egész szám (adattípus)

Az egész számmal ([ ɪnteɡɐ ] angol [ ɪntɪdʒə ], egész számra ; a latin numerus egész számra ) a számítástechnikában egy hivatkozott adattípust használnak, amely egész értékeket tárol. Az értéktartomány véges. Az egész számokkal végzett számítások általában pontosak. Csak akkor léphet túlcsordulás , ha túllépik a megengedett értéktartományt. Alapvető számtani adattípusként az egész számok szinte az összes számítógépes rendszer hardverében megtalálhatók, és szinte minden programozási nyelven elérhetők . Általában többféle egészek vannak, amelyek különböznek a képviselet, hossza vagy jelenlétében aláírja . A megvalósított egész számokkal végzett aritmetika még nem szabványosított, és gyakran nyelvfüggő ( JavaC ) vagy akár fordítófüggő (C - kifejezések kiértékelésének sorrendje) sajátosságai vannak. A szabványosítás egyik kísérlete a "nyelvtől független aritmetika" (ISO / IEC 10967).

Képviseletek

Az egzotikus ábrázolásokon kívül három lehetőség van az egész változók tárolására. A jel - ha van - minden ábrázolásban egy bizonyos számból kiolvasható.

Az aláírt összegábrázolásban az aláírást és az összeget külön tároljuk és feldolgozzuk.

A b -kiegészítõ számok ( kettõ kiegészítõ száma) esetén a nagy abszolút értékû részek részének pontosan a felét negatív számként értelmezzük anélkül, hogy a pozitív számok aritmetikája jelentõsen megváltozna. Ez egyszerű áramkörökhöz és egyszerű előíráshoz vezet a jelváltozásokhoz (számjegyű b-kiegészítés és az azt követő számnövekedés). Nincs különbség kettő komplementaritása és a tisztán pozitív bináris számok között. A reprezentációk és az értékek között bijektív leképezés van (egyetlen értéknek sincs két reprezentációja). Értelmezhető a b-kiegészítő számok, mint a műszaki számlálók (kilométeróra az autóban). A b- komplementer szám hátránya, hogy a legkisebb negatív értéknek nincs pozitív párja az ábrázolásban.

A (b - 1) -kiegészítő számok (a saját-kiegészítő számok ) esetében viszont leegyszerűsödik a jelváltozásokra vonatkozó szabály (az ezt követő növekedés elmarad) és több esetkülönbség, és mindenekelőtt a nulla két ábrázolása (± 0) a számtannál figyelembe kell venni.

A modern számítási rendszerekben a b alap gyakorlatilag kivétel nélkül b = 2, és a kettő kiegészítésében való reprezentáció nagyrészt érvényesült.

A kettő és az ember komplementjének tizedesértéke a bináris rendszerben tíz és kilenc komplementerszám lenne.

Egyes gyártók gyakran tizedes formátumot tartanak fenn az ügyfél kérései (bankok) alapján. Szinte kivétel nélkül egy aláírt összeget választanak, és az összeget az úgynevezett BCD formában ( bináris kódolású tizedesjegy ) menti. A kérés indokolt, mivel kerekítési hibák fordulnak elő, amikor egy tizedes számot egészgé vagy vissza alakítunk, ami lehetetlenné teszi a pontos kereskedelmi könyvelést.

Áttekintés

Kettő kiegészíti Az egyik kiegészítője Aláírt összegábrázolás BCD számok
Bázis 2 2 2 10.
Egyediség visszafordíthatóan egyértelmű 2 ábrázolás ugyanarra az értékre (± 0) 2 ábrázolás ugyanarra az értékre (± 0) Érték nélküli ábrázolások
Értéktartomány maximális, aszimmetrikus szimmetrikus szimmetrikus szimmetrikus

Példák

(a példaszámokat 9 bitre terveztük, mivel kétjegyű BCD számok lehetségesek, MSB  →  LSB ábrázolás ):

Kettő kiegészíti Az egyik kiegészítője Aláírt összegábrázolás BCD számok
maximális 0 1111 1111 (255) 0 1111 1111 (255) 0 1111 1111 (255) 0 1001 1001 (99)
17-én 0 0001 0001 0 0001 0001 0 0001 0001 0 0001 0111
5. 0 0000 0101 0 0000 0101 0 0000 0101 0 0000 0101
1 0 0000 0001 0 0000 0001 0 0000 0001 0 0000 0001
0 0 0000 0000 0 0000 0000 0 0000 0000 0 0000 0000
−0 1 1111 1111 1 0000 0000 1 0000 0000
−1 1 1111 1111 1 1111 1110 1 0000 0001 1 0000 0001
−2 1 1111 1110 1 1111 1101 1 0000 0010 1 0000 0010
−5 1 1111 1011 1 1111 1010 1 0000 0101 1 0000 0101
−17 1 1110 1111 1 1110 1110 1 0001 0001 1 0001 0111
Minimum + 1 1 0000 0001 (−255) 1 0000 0001 (−254) 1 1111 1110 (−254) 1 1001 1000 (−98)
minimális 1 0000 0000 (−256) 1 0000 0000 (−255) 1 1111 1111 (−255) 1 1001 1001 (−99)

A tárolás általános formái

Egy egész szám általában 8, 16, 32, 64 vagy 128 bitből áll (azaz 1, 2, 4, 8 vagy 16 bájt ) - a megfelelő CPU szóhosszának megfelelően . Történelmileg más értékeket is használtak (12, 48, ... bit). A programozási nyelvekben ezeknek a számoknak a jelölése részben szabványosított: A Java-ban ezeket  (8),  (16),  (32) és (64 bites) néven emlegetjük. A C- ben ugyanazok az azonosítók vannak a típusokhoz, de méretük az architektúrától függően változik. Ehhez a C támogatja az előjel nélküli ( ) egész variánsokat, amelyekkel sok régebbi és szintén ilyen processzor kizárólag vagy elsősorban (közvetlenül) dolgozik, mivel ezeket ma is használják a mikrovezérlőkben és a beágyazott rendszerekben . Csak a C99 -ben határozták meg a platformfüggetlen típusokat , amelyek egyértelműen szavak hossza szerint, pontosan meg vannak határozva bitekben, pl. B. az egy bájt széles: ill. . byteshortintlongunsignedint8_tuint8_t

A számítási rendszerek általában az egész számokat gyorsabban dolgozzák fel, mint a lebegőpontos számok , mivel gyakran kevesebb bitet kell feldolgozni (a legkisebb IEEE 754 lebegőpontos szám 32 bit), és az exponens nincs feldolgozva, ami megtakarítja a számítási időt és a memóriaterületet. Ezenkívül a tiszta fixpontos aritmetika (egész alapú) a precíz feldolgozás (rögzített dinamikus határok között ) előnyét kínálja a lebegőpontos aritmetikával szemben ; az adatoktól függő hatások, például a denormalizáció vagy az abszorpció nem jelentkeznek. Emiatt a pénzügyi intézmények belső szoftvereihez gyakran tiszta egész feldolgozásra van szükség. B. a GnuCash- on valósul meg .

A memóriában történő tárolás mellett a számábrázolás bitjeinek egyáltalán való tárolásának szükségessége mellett felmerül a bájtok sorrendjének és elrendezésének problémája is .

Az értékek maximális tartománya

Méret
(bit)
Tipikus nevek jel Az értéktartomány határai ( kettő kiegészítése ) Tizedesjegyek
(aláíratlan)
min Max
8. char, byte / byte, modern: int8_t vagy uint8_t aláírva −128 127. 3
aláírás nélküli 0 255 3
16. Szó, rövid / rövid, egész szám, modern: int16_t vagy uint16_t aláírva −32,768 32,767 5.
aláírás nélküli 0 65,535 5.
32 DWord / Double Word, int, hosszú (Windows 16/32/64-bites rendszereken; Unix / Linux / C99 16/32-bites rendszereken), modern: int32_t vagy uint32_t aláírva −2 147 483 648 2 147 483 647 10.
aláírás nélküli 0 4 294 967 295 10.
64. 64 bites egész, QWORD / Quadword, hosszú, hosszú, hosszú / hosszú (Unix / Linux / C99 64 bites rendszerek), a modern: int64_t vagy uint64_t aláírva −9,223,372,036,854,775,808 9,223,372,036,854,775,807 19-én
aláírás nélküli 0 18,446,744,073,709,551,615 20
128 Int128, Octaword, Double Quadword aláírva ≈ −1.70141 10 38 ≈ 1.70141 · 10 38 39
aláírás nélküli 0 3,40282 · 10 38 39
n BigInteger aláírva −2 n - 1 2 n - 1 - 1 ⌈Log 10 2 n - 1
aláírás nélküli 0 2 n - 1 ⌈Log 10 2 n

Számtani túlcsordulás

Image
Túlcsordulás aláíratlan egész számokhoz (3. bithossz)
Image
Túlcsordulás egész számokkal (bithossz 3 + 1)

Ha egy egész változóhoz az értéktartományán kívüli értéket rendelünk, az aritmetikai túlcsorduláshoz vezet . Tehát z. B. egy előjel nélküli 8 bites egész változóval 255 + 1-től a 0 érték; a kettő előjeles kiegészítésével viszont 127 + 1-től a -128 érték.

Lásd még

irodalom

Egyéni hivatkozások és megjegyzések

  1. ISO / IEC 10967 az angol nyelvű Wikipédiában
  2. Knuth: 2. kötet, S. 195, 4.1 Pozíciós számrendszerek; 284. o., 4.3.2. Moduláris számtan
  3. ^ David Goldberg: Amit minden informatikusnak tudnia kell a lebegőpontos számtanról . In: ACM Computing Surveys . 1991. 23., 5–48. doi : 10.1145 / 103162.103163 . Letöltve: 2010. szeptember 2.
  4. ↑ A GnuCash 1.6 újdonságai . gnucash.org. Letöltve: 2010. szeptember 3.
  5. a b c Agner Fog: Hívási megállapodások különböző C ++ fordítókhoz és operációs rendszerekhez: 3. fejezet, Adatábrázolás (PDF; 416 kB) 2010. február 16., hozzáférés: 2010. augusztus 30.
  6. Eric Giguere: ANSI szabvány: összefoglaló a C programozó . 1987. december 18. Letöltve: 2010. szeptember 4.
  7. Randy Meyers: Az új C: Egész számok a C99-ben, 1. rész . drdobbs.com. 2000. december 1., letöltve: 2010. szeptember 4.