Целобројна вредност (информатика)

Од Википедија — слободната енциклопедија

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

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

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

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

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

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

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

Битови Име Опесг (претпоставка за двоен комплемент за означените) Децимални цифри Употреба
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-битен цел број

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

Означени: ( − 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 типови (кои можат да прикажуваат само целобројни вредности во определен опсег).

Некои јазици како што се Lisp, REXX и Haskell, поддржуваат произволно прецизни целобројни вредности (познати како бесконечно прецизни целобројни вредности или bignums). Други јазици кои не го поддржуваат овој концепт како високолевелска замисла може да имаат библиотеки достапни да прикажуваат многу големи броеви користејќи низа од помали променливи, како што се Java's Biginteger класата или Perl's "bigint" пакувањето. Овие користат току колку што и е потербно на меморијата на компјутерот да скалдира броеви; како и да е, компјутерот има само конечен износ на скалдирање, па така тие исто така можат да прикажуваат конечно подмножество на математичките целобројни вредности. Ове шеми поддржуваат многу големи броеви, на пример, 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-битни целобројни вредности. Таа променлива би требало да биде декларирана како long која има најмалку 32 битови на кој било комлјутер. Програмерите исто така можат неточно да претпостават дека покажувач може да се претвори во цел број без загуба на информација, кој може да работи на (некои) 32-битни компјутери, но не успева на 64-битни компјутери со 64-битни покажувачи и 32-битни цели броеви.