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,

IPv6 adresy, GUID

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.

Běžné krátké celočíselné velikosti
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ší.

Běžné dlouhé celočíselné velikosti
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 longtyp 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é

Poznámky

Reference