Integer (počítačová věda) - Integer (computer science)
Ve vědě o počítačích, An číslo je údaj o integrální datového typu , je datový typ , který představuje určitý rozsah matematických čísel . Integrální datové typy mohou mít různé velikosti a mohou, ale nemusí obsahovat záporné hodnoty. Celá čísla jsou v počítači běžně reprezentována jako skupina binárních číslic (bitů). Velikost seskupení se liší, takže sada dostupných celočíselných velikostí se liší mezi různými typy počítačů. Počítačový hardware téměř vždy poskytuje způsob, jak reprezentovat registr procesoru nebo adresu paměti jako celé číslo.
Hodnota a reprezentace
Hodnota položky s integrovaným typem je matematický celé číslo, které odpovídá. Integrální typy mohou být bez znaménka (schopné reprezentovat pouze nezáporná celá čísla) nebo podepsané (schopné také reprezentovat záporná celá čísla).
Celočíselná hodnota je obvykle uvedena ve zdrojovém kódu programu jako posloupnost číslic volitelně s předponou + nebo -. Některé programovací jazyky umožňují jiné zápisy, například hexadecimální (základ 16) nebo osmičkový (základ 8). Některé programovací jazyky také povolují oddělovače skupin číslic .
Vnitřní reprezentace tohoto nulového bodu je způsob, jakým je tato hodnota uložena v paměti počítače. Na rozdíl od matematických celých čísel má typický datum v počítači určitou minimální a maximální možnou hodnotu.
Nejběžnější reprezentací kladného celého čísla je řetězec bitů pomocí systému binárních čísel . Pořadí bajtů paměti ukládajících bity se liší; viz endianness . Šířka nebo přesnost integrálního typu, je počet bitů v jeho zastoupení. Integrální typ s n bity může kódovat 2 n čísel; například typ bez znaménka obvykle představuje nezáporné hodnoty 0 až 2 n -1. Někdy se používá i jiné kódování celočíselných hodnot do bitových vzorů, například binárně kódované desítkové nebo šedé kódy , nebo jako kódy tištěných znaků, jako je ASCII .
V binárním výpočetním systému existují čtyři známé způsoby, jak reprezentovat podepsaná čísla . Nejběžnější je dvojkový doplněk , který umožňuje, aby podepsaný integrální typ s n bity reprezentoval čísla od −2 ( n −1) do 2 ( n −1) −1. Aritmetika dvojkové komplementace je výhodná, protože mezi reprezentacemi a hodnotami (zejména bez oddělených +0 a -0) existuje dokonalá korespondence jedna k jedné , a protože sčítání , odčítání a násobení nemusí rozlišovat mezi podepsanými a nepodepsanými typy . Mezi další možnosti patří offsetová binární , znaková velikost a doplněk jedniček .
Některé počítačové jazyky definují celočíselné velikosti způsobem nezávislým na stroji; jiné mají různé definice v závislosti na základní velikosti slova procesoru. Ne všechny jazykové implementace definují proměnné všech celočíselných velikostí a definované velikosti nemusí být v konkrétní implementaci ani odlišné. Celé číslo v jednom programovacím jazyce může mít jinou velikost v jiném jazyce nebo na jiném procesoru.
Běžné integrální datové typy
Bity | název | Dosah (za předpokladu, že je doplněk dvou pro znaménko ) | Desetinné číslice | Využití | Implementace | ||||||
---|---|---|---|---|---|---|---|---|---|---|---|
C / C ++ | C# | Pascal a Delphi | Jáva | SQL | FORTRAN | D | |||||
4
|
okusovat , semioctet | Podepsáno: Od −8 do 7, z - (2 3 ) do 2 3 - 1 |
0,9
|
Desetinná čísla s binárním kódováním , reprezentace s jednou desetinnou číslicí | není k dispozici | není k dispozici | není k dispozici | není k dispozici | není k dispozici | není k dispozici | není k dispozici |
Bez znaménka: od 0 do 15, což se rovná 2 4 - 1 |
1.2
|
||||||||||
8
|
byte , octet , i8, u8 | Podepsáno: Od −128 do 127, z - (2 7 ) do 2 7 - 1 |
2.11
|
Znaky ASCII , kódové jednotky v kódování znaků UTF-8 | int8_t , podepsaná char | sbyte | Zkratka | byte | maličký | celé číslo (1) | byte |
Unsigned: od 0 do 255, což se rovná 2 8 - 1 |
2,41
|
uint8_t , znak bez znaménka | byte | Byte | není k dispozici | nepodepsaný tinyint | není k dispozici | ubyte | |||
16
|
poloviční slovo , slovo , krátké, i16, u16 | Podepsáno: Od -32 768 do 32 767, od - (2 15 ) do 2 15 - 1 |
4,52
|
Znaky UCS-2 , kódové jednotky v kódování znaků UTF-16 | int16_t , krátký , int | krátký | Smallint | krátký | smallint | celé číslo (2) | krátký |
Bez znaménka: od 0 do 65 535, což se rovná 2 16 - 1 |
4,82
|
uint16_t, unsigned , unsigned int | ushort | Slovo | char | nepodepsaný smallint | není k dispozici | ushort | |||
32
|
word, long , doubleword, longword, int, i32, u32 | Podepsáno: Od −2 147 483 648 do 2 147 483 647 , z - (2 31 ) do 2 31 - 1 |
9,33
|
Znaky UTF-32 , věrné barvy s alfa, FourCC , ukazatele v 32bitových počítačích | int32_t , int , dlouhý | int | LongInt ; Celé číslo | int | int | celé číslo (4) | int |
Bez znaménka: od 0 do 4 294 967 295, což se rovná 2 32 - 1 |
9,63
|
uint32_t, unsigned , unsigned int , unsigned long | uint | LongWord ; DWord ; Kardinál | není k dispozici | nepodepsané int | není k dispozici | uint | |||
64
|
word, doubleword, longword, long long, quad, quadword, qword, int64, i64, u64 | Podepsáno: Od −9,223,372,036,854,775,808 do 9,223,372,036,854,775,807 , od - (2 63 ) do 2 63 - 1 |
18,96
|
Čas (milisekundy od unixové epochy ), ukazatele v 64bitových počítačích | int64_t , dlouhý , dlouhý | dlouho | Int64 | dlouho | bigint | celé číslo (8) | dlouho |
Bez znaménka: od 0 do 18 446 744 073 709 551 615, což se rovná 2 64 - 1 |
19.27
|
uint64_t , dlouho bez znaménka | ulong | UInt64 ; QWord | není k dispozici | nepodepsaný bigint | není k dispozici | ulong | |||
128
|
octaword, double quadword, i128, u128 | Podpis: Od -170,141,183,460,469,231,731,687,303,715,884,105,728 do 170,141,183,460,469,231,731,687,303,715,884,105,727 od - (2 127 ) na 2 127 - 1 |
38,23
|
Složité vědecké výpočty, | C: k dispozici pouze jako nestandardní rozšíření specifické pro kompilátor | není k dispozici | není k dispozici | není k dispozici | není k dispozici | celé číslo (16) | cent |
Bez znaménka: od 0 do 340 282 366 920 938 463 463 374 607 431 768 211 455, což se rovná 2 128 - 1 |
38,53
|
není k dispozici | ucent | ||||||||
n
|
n -bitové celé číslo (obecný případ) |
Podepsáno: - (2 n −1 ) až (2 n −1 - 1) | ( n - 1) log 10 2 | Ada : rozsah -2 ** (n-1) .. 2 ** (n-1) -1 | |||||||
Bez znaménka: 0 až (2 n - 1) | n log 10 2 | Ada: rozsah 0..2 ** n-1 , mod 2 ** n ; třídy BigDecimal nebo Decimal standardních knihoven nebo libovolných aritmetických knihoven třetích stran v mnoha jazycích, jako je Python, C ++ atd. |
Různé procesory podporují různé integrální datové typy. Hardware bude obvykle podporovat podepsané i nepodepsané typy, ale pouze malou, pevnou sadu šířek.
Tabulka výše uvádí integrální šířky typů, které jsou v hardwaru podporovány běžnými procesory. Programovací jazyky na vysoké úrovni poskytují více možností. Je běžné mít integrální typ „dvojnásobné šířky“, který má dvakrát tolik bitů než největší typ podporovaný hardwarem. Mnoho jazyků má také typy bitových polí (zadaný počet bitů, obvykle omezený na menší než maximální šířku podporovanou hardwarem) a rozsahy (které mohou představovat pouze celá čísla v zadaném rozsahu).
Některé jazyky, například Lisp , Smalltalk , REXX , Haskell , Python a Raku, podporují libovolná přesná celá čísla (známá také jako nekonečná přesná celá čísla nebo bignums ). Jiné jazyky, které tento koncept jako konstrukci nejvyšší úrovně nepodporují, mohou mít k dispozici knihovny, které budou reprezentovat velmi velká čísla pomocí polí menších proměnných, jako je třída Java BigInteger nebo balíček „ bigint “ od Perlu . Ty využívají tolik paměti počítače, kolik je nutné k uložení čísel; počítač má však jen omezené množství úložiště, takže i ony mohou představovat pouze konečnou podmnožinu matematických celých čísel. Tato schémata podporují velmi velká čísla, například jeden kilobajt paměti lze použít k uložení čísel až do 2466 desetinných číslic.
Booleovská nebo vlajka typ je typ, který může představovat pouze dvě hodnoty: 0 a 1, obvykle označeny nepravdivé a pravdivé , resp. Tento typ může být uložen v paměti pomocí jediného bitu, ale často je pro pohodlí adresování a rychlost přístupu uveden celý bajt.
Čtyřbitové množství je známé jako okusování (při jídle je menší než sousto ) nebo nybble (slovní hříčka ve tvaru slova byte ). Jedna nibble odpovídá jedné číslici v šestnáctkové soustavě a obsahuje jednu číslici nebo znakový kód v binárně kódované desítkové soustavě.
Bajty a oktety
Termín byte původně znamenal „nejmenší adresovatelnou jednotku paměti“. V minulosti byly použity všechny 5-, 6-, 7-, 8- a 9bitové bajty. Existovaly také počítače, které dokázaly adresovat jednotlivé bity („bitově adresovaný stroj“) nebo které mohly adresovat pouze 16- nebo 32bitové veličiny („stroj adresovaný slovem“). Termín bajt se obvykle vůbec nepoužíval ve spojení s počítači s adresami bitů a slov.
Termín oktet vždy odkazuje na 8bitové množství. Většinou se používá v oblasti počítačových sítí , kde mohou komunikovat počítače s různými šířkami bajtů.
V moderním použití byte téměř vždy znamená osm bitů, protože všechny ostatní velikosti se již nepoužívají; Takto byte přišel být synonymem pro oktet .
Slova
Termín 'slovo' se používá pro malou skupinu bitů, které jsou zpracovávány současně procesory konkrétní architektury . Velikost slova je tedy specifická pro CPU. Bylo použito mnoho různých velikostí slov, včetně 6, 8, 12, 16, 18, 24, 32, 36, 39, 40, 48, 60 a 64 bitů. Protože je to architektonické, velikost slova je obvykle nastavena prvním CPU v rodině, nikoli charakteristikami pozdějšího kompatibilního CPU. Význam termínů odvozené od slova , jako je longword , Dvojslovo , Čtyřslovo a Poloviční slovo , také měnit v závislosti na CPU a OS.
Prakticky všechny nové stolní procesory jsou schopné používat 64bitová slova, i když vestavěné procesory s velikostí slov 8 a 16 bitů jsou stále běžné. 36-bit délka slova byl obyčejný v raných dobách počítačů.
Jednou z důležitých příčin nepřenositelnosti softwaru je nesprávný předpoklad, že všechny počítače mají stejnou velikost slova jako počítač používaný programátorem. Pokud například programátor používající jazyk C nesprávně deklaruje jako int proměnnou, která bude použita k ukládání hodnot větších než 2 15 −1, program selže na počítačích se 16bitovými celými čísly. Tato proměnná měla být deklarována jako dlouhá , která má na každém počítači alespoň 32 bitů. Programátoři mohou také nesprávně předpokládat, že ukazatel lze převést na celé číslo bez ztráty informací, což může fungovat na (některých) 32bitových počítačích, ale selže na 64bitových počítačích s 64bitovými ukazateli a 32bitovými celými čísly. Tento problém řeší C99 v stdint.h ve formě intptr_t
.
Krátké celé číslo
Krátké celé číslo může představovat celé číslo, které může trvat méně paměti, a přitom mají menší rozsah, ve srovnání se standardní celé číslo na stejném stroji.
V C je označen zkratkou . Musí mít alespoň 16 bitů a často je menší než standardní celé číslo, ale není to nutné. Konformní program může předpokládat, že může bezpečně ukládat hodnoty mezi - (2 15 −1) a 2 15 −1, ale nemusí předpokládat, že rozsah není větší. V Javě , je krátká , je vždy 16-bitové celé číslo. V rozhraní Windows API je datový typ SHORT definován jako 16bitové celé číslo se znaménkem na všech počítačích.
Programovací jazyk | Název datového typu | Podepsanost | Velikost v bajtech | Minimální hodnota | Maximální hodnota |
---|---|---|---|---|---|
C a C ++ | krátký | podepsaný | 2 | -32 767 | +32 767 |
bez znaménka krátké | nepodepsaný | 2 | 0 | 65,535 | |
C# | krátký | podepsaný | 2 | -32 768 | +32 767 |
ushort | nepodepsaný | 2 | 0 | 65,535 | |
Jáva | krátký | podepsaný | 2 | -32 768 | +32 767 |
Dlouhé celé číslo
Dlouhé celé číslo může znamenat celou celé číslo , jehož rozsah je větší než nebo stejná jako standardní celé číslo na stejném stroji.
V C je označen long . Musí mít alespoň 32 bitů a může, ale nemusí být větší než standardní celé číslo. Konformní program může předpokládat, že může bezpečně ukládat hodnoty mezi - (2 31 −1) a 2 31 −1, ale nemusí předpokládat, že rozsah není větší.
Programovací jazyk | Typ schválení | Platformy | Název datového typu | Ukládání v bajtech | Podepsaný rozsah | Rozsah bez znaménka |
---|---|---|---|---|---|---|
C ISO/ANSI C99 | Mezinárodní standard |
Unix , 16/32 bitové systémy Windows , 16/32/64 bitové systémy |
dlouho | 4 (minimální požadavek 4) |
−2 147 483 647 až +2 147 483 647 | 0 až 4 294 967 295 (minimální požadavek) |
C ISO/ANSI C99 | Mezinárodní standard |
Unix , 64bitové systémy |
dlouho | 8 (minimální požadavek 4) |
−9,223,372,036,854,775,807 až +9,223,372,036,854,775,807 | 0 až 18 446 744 073 709 551 615 |
C ++ ISO/ANSI | Mezinárodní standard |
Unix , Windows , 16/32 bitový systém |
dlouho | 4 (minimální požadavek 4) |
−2,147,483,648 až +2,147,483,647 |
0 až 4 294 967 295 (minimální požadavek) |
C ++/CLI | Mezinárodní norma ECMA-372 |
Unix , Windows , 16/32bitové systémy |
dlouho | 4 (minimální požadavek 4) |
−2,147,483,648 až +2,147,483,647 |
0 až 4 294 967 295 (minimální požadavek) |
VB | Společnost Standard | Okna | Dlouho | 4 | −2,147,483,648 až +2,147,483,647 | N/A |
VBA | Společnost Standard | Windows , Mac OS X | Dlouho | 4 | −2,147,483,648 až +2,147,483,647 | N/A |
SQL Server | Společnost Standard | Okna | BigInt | 8 | −9,223,372,036,854,775,808 až +9,223,372,036,854,775,807 | 0 až 18 446 744 073 709 551 615 |
C# / VB.NET | Mezinárodní standard ECMA | Microsoft .NET | dlouhý nebo Int64 | 8 | −9,223,372,036,854,775,808 až +9,223,372,036,854,775,807 | 0 až 18 446 744 073 709 551 615 |
Jáva | Mezinárodní/firemní standard | Platforma Java | dlouho | 8 | −9,223,372,036,854,775,808 až +9,223,372,036,854,775,807 | N/A |
Pascal | ? | Windows , UNIX | int64 | 8 | −9,223,372,036,854,775,808 až +9,223,372,036,854,775,807 | 0 až 18 446 744 073 709 551 615 (typ Qword) |
Dlouhé dlouhé
V C99 verzi programovacím jazyku C a C ++ 11 verzi C ++ , je long long
typ je podporován, který má dvojnásobnou kapacitu minimálně standardem long
. Tento typ není podporován kompilátory, které vyžadují, aby byl kód C kompatibilní s předchozím standardem C ++ C ++ 03, protože dlouhý dlouhý typ v C ++ 03 neexistoval. U kompilátoru kompatibilního s ANSI/ISO musí být splněny minimální požadavky pro specifikované rozsahy, tj. - (2 63 −1) až 2 63 −1 pro podepsané a 0 až 2 64 −1 pro nepodepsané; rozšíření tohoto rozsahu je však povoleno. To může být problém při výměně kódu a dat mezi platformami nebo při přímém přístupu k hardwaru. Existuje tedy několik sad záhlaví poskytujících přesné šířkové typy nezávislé na platformě. Standardní knihovna C poskytuje stdint.h ; toto bylo zavedeno v C99 a C ++ 11.
Viz také
- Aritmetika libovolné přesnosti
- Binárně kódované desetinné číslo (BCD)
- Datové typy C.
- Přetečení celého čísla
- Reprezentace podepsaných čísel