Integer (компјутерска наука)

Од Википедија, слободната енциклопедија
Прејди на: содржини, барај

Во комјутерската наука, поимот integer (или целобројна вредност) се користи за типови на податоци кои претставуваат конечно подмножество од множеството цели броеви. Овие се исто така познати како интегрални типови на податоци.

Значење и прикажување[уреди]

Значењето на податоците од интегрален тип е математички integer кој му соодветствува. Прикажувањето на овие податоци е типот на значењето на кој е складиран во меморијата во компјутерот. Интегралните типови можат да бидат неозначени (способни за прикажување само на не-негативни integers) или означени (исто така способни за прикажување на негативни integers).

Наједноставно прикажување на позитивен integer е низа од битови, користејќи го бинарниот нумерички систем. Редоследот на меморијата на бајтите која ги складира битовите е променлив; Ширината или прецизноста на интегралниот тип е број на битови во сопственото прикажување. Интегрален тип со n битови може да кодира 2n броеви; на пример, неозначен тип типично го прикажува не-негативносто значење на од 0 до 2n-1.

Има три различни начини за прикажување на негативни броеви во бинарниот нумерички систем. Наједноставниот е комплементот на двојка (двоен комплемент), кој им овозможува на означените интегрални типови со n битови да прикажуваат броеви од -2(n-1) до 2(n-1)-1. Двојниот комплемент аритметички е соодветен бидејќи има одлично едно-на-едно совпаѓање помеѓу значењата и прикажувањата и бидејќи не мора да прави разлика меѓу означените и неозначените типови во однос на собирањето, одземањето и множењето. Другите можности се означена-магнитуда и комплементот на единица (единичен комплемент).

Друго, различно прикажување на integers е бинарно-кодиран децимал, кој сѐ уште е наједноставно користен во централниот компјутер за финансиските апликации и во базата на податоци.

Општи интегрални типови на податоци[уреди]

Битови Име Опесг (претпоставка за двоен комплемент за означените) Децимални цифри Употреба
4 Nibble, полуоктани Неозначени: 0 до +15 2 Бинарно кодирани децимали, претставување со еднечна децимална цифра
8 Бајт, октет Означени: -128 до +127

Неозначени: 0 до +255

3

3

ASCII карактери, C/C++ char,

C/C++ uint8_t, int8_t, Java Bajt, C# bajt

16 Полузбор, збор Означени: -32,768 до +32,767

Неозначени: 0 до +65,535

5

5

UCS-2 карактери, C/C++ short, C/C++ uint16_t, int16_t

Java short, C# short, Java char

32 Збор, long, двоен збор, долг збор Означени: -2,147,483,648 до +2,147,483,647

Неозначени: 0 до +4,294,967,295

10

10

UCS-4 карактери, вистински бои со алфа, C/C++ long (На Windows и 32-biten DOS и Unix), C/C++ uint32_t, int32_t, Java int, C# int, FourCC
64 Двоен збор, долг збор, long long, quad, четворен збор, int64 Означени : - 9,223,372,036,854,775,808 до +9,223,372,036,854,775,807

Неозначени: 0 до +18,446,744,073,709,551,615

19

20

C/C++ long (На 64-biten Unix), C/C++ long long, C/C++ uint64_t, int64_t, Java long, C# long, Delphi int64
128 Октален збор Означени: −170,141,183,460,469,231,731,687,303,715,884,105,728 до +170,141,183,460,469,231,731,687,303,715,884,105,727

Неозначени: 0 до +340,282,366,920,938,463,463,374,607,431,768,211,455

39

39

Овозможено само C како нестандардна компјалер екстензија
n n-битен integer

(генерален случај)

Означени: ( − 2n − 1) до (2n − 1 − 1)

Неозначени: 0 до (2n − 1)

abs((n-1)log102)

abs(nlog102)

Ada опсег -2**(n-1)..2**(n-1)-1

Ada опсег 0..2**n-1, Ada mod 2**n

Различни CPUs поддржуваат различни интегрални типови на податоци. Типично, хардверот ќе ги поддржи и двата типа, и означените и неозначените, но само во мал, фиксиран сет од ширини.

Табелата погоре прикажува интегрални типови на ширини кои се поддржани во хардверот од едноставни процесори. Високото ниво на програмски јазици овозможува повеќе можности. Едноставно е да се има интегрален тип во "дупла ширина" кој има два пати повеќе битови од најголемиот тип на хардвер-поддржувач. Многу јазици исто така имаат bit-field типови (специјализиран број на битови, обично ограничени да бидат помалку од максимално хардверската-поддржувачка ширина) и range типови (кои можат да прикажуваат само integers во определен опсег).

Некои јазици како што се Lisp, REXX и Haskell, поддржуваат произволно прецизни integers (познати како бесконечно прецизни integers или bignums). Други јазици кои не го поддржуваат овој концепт како високо-левелска замисла може да имаат библиотеки достапни да прикажуваат многу големи броеви користејќи низа од помали варијабли, како што се Java's Biginteger класата или Perl's "bigint" пакувањето. Овие користат току колку што и е потербно на меморијата на компјутерот да скалдира броеви; како и да е, компјутерот има само конечен износ на скалдирање, па така тие исто така можат да прикажуваат конечен subset на математичките integers. Ове шеми поддржуваат многу големи броеви, на пример, 1 килобајт од меморијата може да се искористи за да се складираат броеви со над 2466 едноцифрени броеви во должина.

Boolean или Flag типот е тип кој може да прикажува само две вредности: 0 и 1, обично идентификувани со "лажно" или "точно" посебно. Овој тип може да биде складиран во меморијата користејќи поединечен бит, но често е даден како цел бајт за погодност на адресирање и брзина на пристап.

Четирибитната количина позната е како нагризана (кога "јаде" станува помала од нагризувањето) или nibble (будивајќи игра од зборови од формата на зборот бајт). Едно нагризување одговара на еден едноцифрен број или означен код во бинарно-кодираниот децимал.

Бајти и октети[уреди]

Поимот бајт иницијално зачел "најмалата адресирачка единица на меморијата". Во минатото, 5-, 6-, 7-, 8- и 9-битните бајти биле сите користени. Исто така имало компјутери кои можеле да адресираат индивидуални битови ("бит-адрсирана машина"), или имало такви кои можеле само да адресираат 16- или 32-битни количини ("збор-адрсирана машина"). Терминот бајт обично не беше користен во сите конекции со бит-и збор-адресирани машини.

Поимот октет секогаш опишува 8-битна количина. Тој најчесто е користен во полето на компјутерската мрежа, каде компјутерите со различни ширини на бајти можат да комуницираат.

Во модерната примена, бајтот скоро непреоменливо значи 8 бита, откако сите други димензии паднале во неуботреба; така бајтот успеа да биде синоним со октет.

Зборови[уреди]

Поимот збор се користи во мали групи од битови кои се понудени симултано од процесорите на поединечната архитектура. Големината на зборот е зависна од CPU. Многу различни големини на зборовите биле користени, вклучувајќи ги 6-, 8-, 12-, 16-, 18-, 24-, 32-, 36-, 39-, 48-, 60- и 64-битните. Откако е архитектурно, големината на зборот обично е поставена од првиот CPU во фамилијата, отколку од карактеристиките на покасно компатибилниот CPU. Значењата на поимите кои произлегуваат од збор, како на пример долг збор, двоен збор, четворозбор и полазбор, исто така се разликуваат од CPU и OS.

Почнувајќи од 2008 сите нови десктоп процесори се од x86-64 фамилијата и се способни за користење 64-битни зборови, тие се како и да е често користени на 32-битен начин. Вградените процесори со 8- и 16-битна големина на зборот се сѐ уште секојдневни. 32-битниот збор во должина беше секојдневен во раните денови на компјутерите.

Една важна причина на не-преносливост од софтверот е неточната претпоставка дека сите компјутери ја имаат истата големина на зборовите како компјутерот користен од програмерот. На пример, ако програмерот користејќи го C јазикот неточно декларира како int променлива која ќе биде користена да ги складира вредностите поголеми од 216-1, програмата ќе падне на компјутерите со 16-битни integers. Таа варијабла би требало да биде декларирана како long која има најмалку 32 битови на кој било комлјутер. Програмерите исто така можат неточно да претпостават дека покажувач може да биде конвертиран во integer без загуба на информација, кој може да работи на (некои) 32-битни компјутери, но не успева на 64-битни компјутери со 64-битни покажувачи и 32-битни integers.