C/Standardikirjastot/stdint.h
#include <stdint.h>
[Lisätty C99-standardissa]
Määrittelee uusia kokonaislukutietotyyppejä ja lisäksi lisämakroja, joista selviää joidenkin tietotyyppien rajat (jotka eivät selviä limits.h:lla).
Uusia kokonaislukutyyppejä on kahdenlaisia: vakiopituiset ja muut.
Vakiopituinen etumerkillinen kokonaislukutyyppi intN_t, missä N on 8, 16, 32, tai 64, täyttää nämä ehdot:
- tietotyypissä on tasan N bittiä
- kaikki N bittiä ovat merkitseviä
- negatiiviset luvut ilmaistaan kahden komplementilla
- pienin arvo on –2N–1
- suurin arvo on 2N–1 – 1
Vakiopituinen etumerkitön kokonaislukutyyppi uintN_t, missä N on 8, 16, 32, tai 64, täyttää nämä ehdot:
- tietotyypissä on tasan N bittiä
- kaikki N bittiä ovat merkitseviä
- suurin arvo on 2N – 1
Vakiopituista tietotyyppiä ei välttämättä ole määritelty, jos kääntäjä ei pysty toteuttamaan sitä kohdealustalla. Tällöin myöskään rajamakroja ei määritellä, joten voidaan tarkistaa esikääntäjän tasolla, että tietotyypit ovat olemassa.
Tietotyyppi | Selite | Minimiarvo | Maksimiarvo |
---|---|---|---|
uint8_t | Etumerkitön 8-bittinen kokonaisluku | 0 | UINT8_MAX = 28 – 1 = +255 |
int8_t | Etumerkillinen 8-bittinen kokonaisluku | INT8_MIN = –27 – 1 = –128 | INT8_MAX = 27 – 1 = +127 |
uint16_t | Etumerkitön 16-bittinen kokonaisluku | 0 | UINT16_MAX = 216 – 1 = +65535 |
int16_t | Etumerkillinen 16-bittinen kokonaisluku | INT16_MIN = –215 – 1 = –32768 | INT16_MAX = 215 – 1 = +32767 |
uint32_t | Etumerkitön 32-bittinen kokonaisluku | 0 | UINT32_MAX = 232 – 1 = +4294967295 |
int32_t | Etumerkillinen 32-bittinen kokonaisluku | INT32_MIN = –231 – 1 = –2147483648 | INT32_MAX = 231 – 1 = +2147483647 |
uint64_t | Etumerkitön 64-bittinen kokonaisluku | 0 | UINT64_MAX = 264 – 1 = +18446744073709551615 |
int64_t | Etumerkillinen 64-bittinen kokonaisluku | INT64_MIN = –263 – 1 = –9223372036854775808 | INT64_MAX = 263 – 1 = +9223372036854775807 |
Varsinaisten vakiopituisten tyyppien lisäksi jokaisella tyypillä on myös fast- ja least-versiot, esimerkiksi uint32_t → uint_fast32_t, uint_least32_t. Standardi takaa, että nämä tietotyypit on aina saatavilla, toisin kuin varsinaiset vakiopituiset tietotyypit. least-tyyppi on pienin sopiva kokonaislukutyyppi, jossa on vähintään N bittiä; fast-tyyppi on vähintään N bittistä sisältävistä kokonaislukutyypeistä se, joka on kääntäjän mielestä nopein. fast- ja least-tietotyypeille ei taata, että negatiiviset luvut ilmaistaisiin kahden komplementilla, joten niiden arvoalue voi olla vakiopituisia tietotyyppejä hieman pienempi.
fast- ja least-tyypeille on saatavilla myös rajat, esim. uint_fast32_t:lla UINT_FAST32_MAX, int_fast32_t:lla INT_FAST32_MIN ja INT_FAST32_MAX.
Muut stdint.h:n uudet tietotyypit ovat:
intmax_t uintmax_t intptr_t uintptr_t
intmax_t on etumerkillisistä kokonaislukutyypeistä se, jonka esitettävä arvoalue on laajin. uintmax_t on etumerkittömistä kokonaislukutyypeistä se, jonka esitettävä arvoalue on laajin.
intptr_t on etumerkillinen kokonaislukutyyppi, johon mahtuu mikä tahansa (arvo-)osoittimen mahdollinen arvo eli muistiosoite. uintmax_t on etumerkillinen kokonaislukutyyppi, johon mahtuu mikä tahansa (arvo-)osoittimen mahdollinen arvo eli muistiosoite.
Näille tyypeille määritellään myös rajat:
Tietotyyppi | Minimiarvon makro | on pienempi tai yhtä kuin |
Maksimiarvon makro | on suurempi tai yhtä kuin |
Huomiot |
---|---|---|---|---|---|
intmax_t
|
INTMAX_MIN
|
-9223372036854775807 | INTMAX_MAX
|
+9223372036854775807 | |
uintmax_t
|
— | = 0 | UINTMAX_MAX
|
+18446744073709551615 | |
intptr_t
|
INTPTR_MIN
|
-32767 | INTPTR_MAX
|
+32767 | |
uintptr_t
|
— | = 0 | UINTPTR_MAX
|
+65535 |
Lisärajat, joita ei ole limits.h:ssa:
Nimi | Raja | Selite |
---|---|---|
SIZE_MAX | ≥ +65535 | size_t:n suurin mahdollinen arvo |
PTRDIFF_MIN | ≤ -65535 | ptrdiff_t:n pienin mahdollinen arvo |
PTRDIFF_MAX | ≥ +65535 | ptrdiff_t:n suurin mahdollinen arvo |
SIG_ATOMIC_MIN | = 0 (jos sig_atomic_t etumerkitön)
≤ -127 (jos sig_atomic_t etumerkillinen) |
sig_atomic_t:n pienin mahdollinen arvo |
SIG_ATOMIC_MAX | ≥ +255 (jos sig_atomic_t etumerkitön)
≥ +127 (jos sig_atomic_t etumerkillinen) |
sig_atomic_t:n suurin mahdollinen arvo |
WCHAR_MIN | = 0 (jos wchar_t etumerkitön)
≤ -127 (jos wchar_t etumerkillinen) |
wchar_t:n pienin mahdollinen arvo |
WCHAR_MAX | ≥ +255 (jos wchar_t etumerkitön)
≥ +127 (jos wchar_t etumerkillinen) |
wchar_t:n suurin mahdollinen arvo |
WINT_MIN | = 0 (jos wint_t etumerkitön)
≤ -32767 (jos wint_t etumerkillinen) |
wint_t:n pienin mahdollinen arvo |
WINT_MAX | ≥ +65536 (jos wint_t etumerkitön)
≥ +32767 (jos wint_t etumerkillinen) |
wint_t:n suurin mahdollinen arvo |
stdint.h on yksi harvoista otsikkotiedostoista, joka on saatavilla myös ns. irrallisessa (engl. freestanding) ympäristössä. Tämä tarkoittaa sitä, että otsikkotiedoston määritelmät ovat kääntäjän tiedossa heti jo ohjelmaa kääntäessä, eikä se sisällä funktioita tai muuttujia. Irrallisia ympäristöjä ovat sellaiset, joissa ei ole saatavilla suoritettavaa C-standardikirjaston toteutusta.