Целое, целочисленный тип данных (англ. Integer), в информатике — один из простейших и самых распространённых типов данных в языках программирования. Служит для представления целых чисел.
Множество чисел этого типа представляет собой конечное подмножество бесконечного множества целых чисел, ограниченное максимальным и минимальным значениями.
В программировании различают беззнаковые целые числа и целые числа со знаком. Знак числа обычно кодируется старшим битом машинного слова. Традиционно, если старший бит равен 1, то число считается отрицательным, только, если оно не определено как беззнаковое.
Количество чисел в машинном изображении множества целых чисел зависит от длины машинного слова, обычно выражаемой в битах. Например, при длине машинного слова 1 байт (8 бит) диапазон представимых целых чисел со знаком от −128 до 127. В беззнаковом формате байтовое представление числа будет от 0 до 255 (28 — 1). Если используется 32-разрядное машинное слово, то целое со знаком будет представлять значения от −2 147 483 648 (-231) до 2 147 483 647 (231−1); всего 1 0000 000016 (4 294 967 29610) возможных значений.
Ограничение длины машинного слова, обусловленное конкретной аппаратной реализацией того или иного компьютера, не препятствие для обработки ими весьма длинных в битах представлений целых чисел, достигаемое усложнением программных алгоритмов. Естественное ограничение — конечность ёмкости памяти и разумное время на исполнение.
Целые числа и вычисления с целыми числами в современных компьютерах имеют очень важное значение (в подавляющем количестве приложений занимают меньше ресурсов процессора, чем арифметика с плавающей точкой). Вся адресная арифметика и операции с индексами массивов основаны на целочисленных операциях.
В памяти типовой компьютерной системы целое число представлено в виде цепочки битов фиксированного (кратного 8) размера. Эта последовательность нулей и единиц — не что иное, как двоичная запись числа, поскольку обычно для представления чисел в современной компьютерной технике используется позиционный двоичный код. Диапазон целых чисел, как правило, определяется количеством байтов в памяти компьютера, отводимых под одну переменную.
Многие языки программирования предлагают выбор между короткими (англ. short), длинными (англ. long) и целыми стандартной длины. Длина стандартного целого типа, как правило, совпадает с размером машинного слова на целевой платформе. Для 16-разрядных операционных систем — этот тип (int) составляет 2 байта и совпадает с типом short int (можно использовать как short, опуская слово int), для 32-разрядных операционных систем он будет равен 4 байтам и совпадает с длинным целым long int (можно использовать как long, опуская слово int), и в этом случае будет составлять 4 байта. Короткое целое short int, для 16-разрядных операционных систем, 32-разрядных операционных систем, и для большинства 64-разрядных операционных систем составляет — 2 байта. Также в некоторых языках может использоваться тип данных двойное длинное long long, который составляет 8 байт.
Для 64-разрядных операционных систем, учитывая разность моделей данных (LP64, LLP64, ILP64), представление целого типа на разных моделях данных может отличаться между собой. Тип int и long может составлять как 4, так и 8 байт.
Стоит отметить, что каждый язык программирования реализует свою сигнатуру представления целых чисел, которая может отличаться от международных стандартов, но обязана его/их поддерживать. К примеру можно отнести кросс-платформенную библиотеку Qt, где целое представляется типом qintX и quintX, где X-8,16,32,64.
Целые типы подразделяются на беззнаковые (англ. unsigned) и знаковые (англ. signed).
Беззнаковые целые представляют только неотрицательные числа, при этом все разряды кода используются для представления значения числа и максимальное число соответствует единичным значениям кода во всех разрядах: 111…111. m-байтовая переменная целого типа без знака, очевидно, принимает значения от 0 до +28m−1.
В C и C++ для обозначения беззнаковых типов используется префикс unsigned. В C# в качестве показателя беззнаковости используется префикс u (англ. unsigned). Например, для объявления беззнакового целого, равного по размеру одному машинному слову используется тип uint.
Беззнаковые целые, в частности, используются для адресации памяти, представления символов.
Иногда в литературе[1] встречаются рекомендации не использовать тип беззнаковые целые, поскольку он может быть не реализован процессором компьютера, однако вряд ли этот совет следует считать актуальным — большинство современных процессоров (в том числе x86-совместимые[2]) одинаково хорошо работают как со знаковыми, так и с беззнаковыми целыми.
В некоторых языках, например Java, беззнаковые целые типы (за исключением символьного) отсутствуют[3].
Неправильное использование беззнаковых целых может приводить к неочевидным ошибкам из-за возникающего переполнения[4]. В приведённом ниже примере использование беззнаковых целых в цикле в C и C++ превращает этот цикл в бесконечный:
char ar[N];
for (unsigned int i = N-1; i >= 0; --i){
ar[i] = i;
}
Существует несколько различных способов представления целых значений в двоичном коде в виде величины со знаком. В частности можно назвать прямой и обратный коды. Знак кодируется в старшем разряде числа: 0 соответствует положительным, а 1 отрицательным числам.
Могут быть использованы и более экзотические представления отрицательных чисел, такие, как, например, система счисления по основанию −2.[5]
Однако для большинства современных процессоров обычным представлением чисел со знаком является дополнительный код. Максимальное положительное число представляется двоичным кодом 0111…111, максимальное по модулю отрицательное кодом 1000…000, а код 111…111 соответствует −1. Такое представление чисел соответствует наиболее простой реализации арифметических логических устройств процессора на логических вентилях и позволяет использовать один и тот же алгоритм сложения и вычитания как для беззнаковых чисел, так и для чисел со знаком (отличие — только в условиях, при которых считается, что наступило арифметическое переполнение).
m-байтовая переменная целого типа со знаком принимает значения от −28m-1 до +28m-1−1.
Ниже представлена таблица предельных значений десятичных чисел для разных разрядностей при кодировании дополнительным кодом. В столбце «Максимальное десятичное» сначала идёт максимальное значение целого без знака, а под ним минимальное и максимальное целое со знаком.
Битов | Байтов | Дв. слов | Максимальное десятичное | Дес. цифр |
---|---|---|---|---|
4 | ½ | ⅛ | 15 −8 +7 |
2 1 1 |
8 | 1 | ¼ | 255 −128 +127 |
3 3 3 |
16 | 2 | ½ | 65535 −32768 +32767 |
5 5 5 |
24 | 3 | ¾ | 16777215 −8388608 +8388607 |
8 7 7 |
32 | 4 | 1 | 4294967295 −2147483648 +2147483647 |
10 10 10 |
48 | 6 | 1½ | 281474976710655 −140737488355328 +140737488355327 |
15 15 15 |
64 | 8 | 2 | 18446744073709551615 −9223372036854775808 +9223372036854775807 |
20 19 19 |
96 | 12 | 3 | 79228162514264337593543950335 −39614081257132168796771975168 +39614081257132168796771975167 |
29 29 29 |
128 | 16 | 4 | 340282366920938463463374607431768211455 −170141183460469231731687303715884105728 +170141183460469231731687303715884105727 |
39 39 39 |
256 | 32 | 8 | 115792089237316195(…)584007913129639935 −57896044618658097(…)792003956564819968 +57896044618658097(…)792003956564819967 |
78 77 77 |
512 | 64 | 16 | 13407807929942597099(…)946433649006084095 −6703903964971298549(…)973216824503042048 +6703903964971298549(…)973216824503042047 |
155 154 154 |
1024 | 128 | 32 | 179769313486231590(…)356329624224137215 −89884656743115795(…)678164812112068608 +89884656743115795(…)678164812112068607 |
309 308 308 |
2048 | 256 | 64 | 32317006071311007(…)853611059596230655 −16158503035655503(…)926805529798115328 +16158503035655503(…)926805529798115327 |
617 617 617 |
4096 | 512 | 128 | 1044388881413152506(…)708340403154190335 −522194440706576253(…)354170201577095168 +522194440706576253(…)354170201577095167 |
1234 1233 1233 |
8192 | 1024 | 256 | 1090748135619415929(…)505665475715792895 −545374067809707964(…)252832737857896448 +545374067809707964(…)252832737857896447 |
2467 2466 2466 |
16384 | 2048 | 512 | 1189731495357231765(…)027290669964066815 −594865747678615882(…)513645334982033408 +594865747678615882(…)513645334982033407 |
4933 4932 4932 |
32768 | 4096 | 1024 | 1415461031044954789(…)668104633712377855 −707730515522477394(…)334052316856188928 +707730515522477394(…)334052316856188927 |
9865 9864 9864 |
65536 | 8192 | 2048 | 2003529930406846464(…)587895905719156735 −1001764965203423232(…)793947952859578368 +1001764965203423232(…)793947952859578367 |
19729 19729 19729 |
131072 | 16384 | 4096 | 4014132182036063039(…)812318570934173695 −2007066091018031519(…)906159285467086848 +2007066091018031519(…)906159285467086847 |
39457 39457 39457 |
262144 | 32768 | 8192 | 16113257174857604736(…)605349934298300415 −8056628587428802368(…)302674967149150208 +8056628587428802368(…)302674967149150207 |
78914 78913 78913 |
524288 | 65536 | 16384 | 259637056783100077(…)364528226185773055 −129818528391550038(…)182264113092886528 +129818528391550038(…)182264113092886527 |
157827 157827 157827 |
1048576 | 131071 | 32767 | 67411401254990734(…)119068940335579135 −33705700627495367(…)559534470167789568 +33705700627495367(…)559534470167789567 |
315653 315653 315653 |
К целочисленным значениям применимы в первую очередь арифметические операции. Ниже приведены самые часто используемые (в скобках указаны их обозначения в различных языках программирования и им аналогичным средствах).
В некоторых языках программирования для лаконичности есть операторы, которые позволяют производить арифметическую операцию с присвоением. Например, «+=» складывает текущее значение переменной слева с выражением справа и помещает результат в исходную переменную. Так же в некоторых языках и средах доступна совмещённая операция MulDiv, которая умножает на одно число, а потом делит результат на второе.
Обычно самыми дорогими по скорости операциями являются умножение и деление (получение остатка от деления).
В памяти компьютера для хранения целых чисел обычно отводятся ячейки фиксированного объёма. Из-за этого операции увеличения и уменьшения значений могут приводить к переполнению, что оборачивается искажением результата. Некоторые языки программирования позволяют производит вызов исключения в таких случаях. Кроме этого, можно определять поведение при переполнении:
Помимо математических, к целым числам применимы битовые операции, которые основаны на особенностях позиционного двоичного кодирования. Обычно они выполняются значительно быстрее арифметических операций и поэтому их используют как более оптимальные аналоги.
Довольно частыми операциями являются получение строки из числового значения во внутреннем представлении и обратно — число из строки. При преобразовании в строку обычно доступны средства задания форматирования в зависимости от языка пользователя.
Ниже перечислены некоторые из представлений чисел строкой.
К целым относится также перечислимый тип. Переменные перечислимого типа принимают конечный заранее заданный набор значений. Размер набора не определяется числом байтов, используемых для представления целочисленных значений переменных такого типа.
Например, в языке Python логический тип является подтипом целого и использует имена False и True, которые при приведении к целому получают значения 0 и 1 соответственно[6].
Для улучшения этой статьи желательно: |
Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".
Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.
Если сделанные Вами правки не будут кем-нибудь удалены, то через несколько дней они появятся на сайте WikiSort.ru .