Kokonaisluku (tietotyyppi)

Kanssa Kokonaisluku ([ ɪnteɡɐ ] Englanti [ ɪntɪdʒə ], sillä kokonaisluku , sekä Latinalaisen aloituskiintiöt kokonaisluku ) käytetään tietotekniikassa datatyypin tarkoitetut, joka tallentaa kokonaislukuina. Arvoalue on rajallinen. Laskut kokonaisluvuilla ovat yleensä tarkkoja. Vain ylivuoto voi tapahtua, jos sallittu arvoalue ylitetään. Aritmeettisena perustietotyyppinä kokonaislukuja on melkein kaikkien tietokonejärjestelmien laitteistossa ja ne ovat saatavilla melkein kaikilla ohjelmointikielillä . Yleensä tarjotaan useita kokonaislukutyyppejä, jotka eroavat toisistaan ​​niiden esityksessä, pituudessa tai merkin esiintymisessä . Toteutettua kokonaislukujen laskutoimitusta ei ole vielä standardoitu, ja sillä on usein kielestä riippuvia ( JavaC ) tai jopa kääntäjistä riippuvia (C - lausekkeiden arviointijärjestys) erityispiirteitä. Yksi yritys standardointiin on "kielestä riippumaton aritmeettinen" (ISO / IEC 10967).

Edustukset

Eksoottisten esitysten lisäksi kokonaisluku muuttujien tallentamiseen on kolme vaihtoehtoa. Merkki - jos sellainen on - voidaan lukea tietystä numerosta kaikissa esityksissä.

Allekirjoitetussa summaesityksessä merkki ja summa tallennetaan ja käsitellään erikseen.

Tapauksessa b -complement numerot ( kahden komplementti -numerot) täsmälleen puoli osajoukko numerot, joilla on suuri absoluuttinen arvo tulkitaan negatiivisia lukuja ilman aritmeettinen positiivisten lukujen ollessa merkittävästi muuttunut. Tämä johtaa yksinkertaisiin piireihin ja yksinkertaiseen sääntöyn merkkien muutoksille ( numeroiden mukainen b- täydennys ja myöhempi lukumäärän kasvu). Kahden komplementtiaritmeettisen ja puhtaasti positiivisen binääriluvun välillä ei ole eroa. Esitysten ja arvojen välillä on bijektiivinen kartoitus (millään arvolla ei ole kahta esitystä). Voidaan tulkita b- täydennyslukuja, kuten tekniset laskurit (matkamittari autossa). Haittana b -complement numeroita on, että pienin negatiivinen arvo ei ole positiivinen vastine edustus.

Toisaalta (b - 1) -lisänumeroiden ( yhden täydennysluvut ) tapauksessa merkkien muutossääntö yksinkertaistuu (myöhempi lisäys jätetään pois) ja enemmän tapauseroja ja ennen kaikkea kaksi nollan esitystä (± 0) on otettava huomioon aritmeettisesti .

Nykyaikaisissa laskentajärjestelmissä perusta b on käytännössä poikkeuksetta b = 2 ja edustus kahden komplementissa on vallinnut suurelta osin.

Desimaaliekvivalentit kahden ja yhden komplementille binaarijärjestelmässä olisivat kymmeniä ja yhdeksän komplementtilukuja.

Jotkut valmistajat ylläpitävät usein desimaalimuotoa asiakkaiden pyyntöjen (pankkien) perusteella. Lähes poikkeuksetta valitaan allekirjoitettu summa ja määrä tallennetaan ns. BCD- muotoon ( binäärikoodattu desimaali ). Pyyntö on perusteltu, koska pyöristysvirheitä esiintyy muunnettaessa desimaaliluku kokonaisluvuksi tai takaisin, mikä tekee tarkan kaupallisen kirjanpidon mahdottomaksi.

Yleiskatsaus

Kaksi täydentää Yksi täydentää Allekirjoitettu summaesitys BCD-numerot
Pohja 2 2 2 10
Ainutlaatuisuus käänteisesti yksiselitteinen 2 esitystä samalle arvolle (± 0) 2 esitystä samalle arvolle (± 0) Edut, joilla ei ole arvoa
Arvojen alue maksimaalinen, epäsymmetrinen symmetrinen symmetrinen symmetrinen

Esimerkkejä

(esimerkkinumerot on suunniteltu 9 bitille, koska kaksinumeroiset BCD-numerot ovat mahdollisia, edustus MSB  →  LSB ):

Kaksi täydentää Yksi täydentää Allekirjoitettu summaesitys BCD- numerot
maksimi 0 1111 1111 (255) 0 1111 1111 (255) 0 1111 1111 (255) 0 1001 1001 (99)
17 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
Vähintään + 1 10000 0001 (−255) 10000 0001 (−254) 1 1111 1110 (−254) 11001 1000 (−98)
vähintään 10000 0000 (−256) 10000 0000 (−255) 1 1111 1111 (−255) 1 1001 1001 (−99)

Yleiset varastointimuodot

Kokonaisluku koostuu yleensä 8, 16, 32, 64 tai 128 bitistä (ts. 1, 2, 4, 8 tai 16 tavua ) - vastaavan suorittimen sanan pituuden mukaan . Historiallisesti käytettiin myös muita arvoja (12, 48, ... bittiä). Ohjelmointikielissä näiden numeroiden nimitykset on standardoitu osittain: Java: ssa niitä kutsutaan  (8),  (16),  (32) ja (64-bittisiksi). In C on samat tunnisteet tyyppejä, mutta niiden koko vaihtelee riippuen arkkitehtuurista. Tätä varten C tukee allekirjoittamattomia ( ) kokonaisluvumuunnelmia, joiden kanssa monet vanhemmat ja myös sellaiset prosessorit työskentelevät yksinomaan tai ensisijaisesti (suoraan), koska niitä käytetään edelleen mikrokontrollereissa ja sulautetuissa järjestelmissä . Vasta C99: ssä määriteltiin alustasta riippumattomat tyypit, jotka on määritelty selkeästi bitteinä niiden nimenomaisen sanan pituuden mukaan, esim. B. yhden tavun leveä: vastaavasti. . byteshortintlongunsignedint8_tuint8_t

Laskentajärjestelmät käsittelevät yleensä kokonaislukuja nopeammin kuin liukuluvut , koska usein on käsiteltävä vähemmän bittejä (pienin IEEE 754 -liukuluku on 32 bittiä) ja eksponenttia ei käsitellä, mikä säästää laskenta-aikaa ja muistitilaa. Lisäksi puhdas kiinteän pisteen aritmeettinen (kokonaislukuun perustuva) etu on tarkan käsittelyn (kiinteissä dynaamisissa rajoissa ) liukulukuaritmeettiseen verrattuna ; datasta riippuvia vaikutuksia, kuten denormalisointia tai absorptiota, ei esiinny. Tästä syystä finanssilaitosten sisäisille ohjelmistoille vaaditaan usein puhdasta kokonaislukujen käsittelyä. B. toteutetaan GnuCashissa .

Muistiin tallennettaessa on lisäksi tavu järjestää ja järjestää ongelma lukujen esityksen bittien säilyttämisen lisäksi .

Suurin arvoalue

Koko
(bitti)
Tyypillisiä nimiä merkki Arvoalueen rajat ( kahden täydennys ) Desimaalit
(allekirjoittamaton)
min Maks
8. char, tavu / tavu, moderni: int8_t tai uint8_t allekirjoitettu −128 127 3
allekirjoittamaton 0 255 3
16 Sana, lyhyt / lyhyt, kokonaisluku, moderni: int16_t tai uint16_t allekirjoitettu −32,768 32,767 5
allekirjoittamaton 0 65,535 5
32 DWord / Double Word, int, pitkä (Windows 16/32/64-bittisissä järjestelmissä; Unix / Linux / C99 16/32-bittisissä järjestelmissä), moderni: int32_t tai uint32_t allekirjoitettu −2 147 483 648 2 147 483 647 10
allekirjoittamaton 0 4 294 967 295 10
64 Int64, QWord / Quadword, pitkä pitkä, pitkä / pitkä (Unix / Linux / C99 64-bittisissä järjestelmissä), moderni: int64_t tai uint64_t allekirjoitettu −9,223,372,036,854,775,808 9,223,372,036,854,775,807 19. päivä
allekirjoittamaton 0 18,446,744,073,709,551,615 20. päivä
128 Int128, kahdeksasana, kaksinkertainen nelisana allekirjoitettu ≈ −1,70141 10 38 ≈ 1.70141 · 10 38 39
allekirjoittamaton 0 ≈ 3.40282 · 10 38 39
n Iso kokonaisluku allekirjoitettu −2 n - 1 2 n - 1 - 1 OgLoki 10 2 n - 1
allekirjoittamaton 0 2 n - 1 ⌈Loki 10 2 n

Aritmeettinen ylivuoto

Image
Ylivuoto allekirjoittamattomille kokonaislukuille (bittipituus 3)
Image
Ylivuoto kokonaisluvuilla (bittipituus 3 + 1)

Jos kokonaisluku muuttujalle määritetään arvo sen arvoalueen ulkopuolella, se johtaa aritmeettiseen ylivuotoon . Joten z. B. allekirjoittamattomalla 8-bittisellä kokonaisluku muuttujalla 255 + 1 arvo 0; toisaalta signeeratulla yksi kahtena täydennyksellä arvosta 127 + 1 arvo −128.

Katso myös

kirjallisuus

Yksittäiset viitteet ja kommentit

  1. ISO / IEC 10967 englanninkielisessä Wikipediassa
  2. Knuth: Osa 2. S. 195, 4.1 Paikkanumerojärjestelmät; S. 284, 4.3.2 Modulaarinen aritmeettinen
  3. ^ David Goldberg: Mitä jokaisen tietojenkäsittelytieteen tutkijan tulisi tietää liukulukulaskennasta . Julkaisussa: ACM Computing Surveys . 23, 1991, s. 5-48. doi : 10.1145 / 103162.103163 . Haettu 2. syyskuuta 2010.
  4. Mitä uutta GnuCash 1.6: ssa? . gnucash.org. Haettu 3. syyskuuta 2010.
  5. a b c Agner Fog: Soittokäytännöt eri C ++ -kääntäjille ja käyttöjärjestelmille: Luku 3, Tietojen esitys (PDF; 416 kB) 16. helmikuuta 2010. Käytetty 30. elokuuta 2010.
  6. Ric Eric Giguere: ANSI-standardi: Yhteenveto C-ohjelmoijalle . 18. joulukuuta 1987. Haettu 4. syyskuuta 2010.
  7. Randy Meyers: Uusi C: Kokonaisluvut C99: ssä, osa 1 . drdobbs.com. 1. joulukuuta 2000. Haettu 4. syyskuuta 2010.