Целое число (информатика) - Integer (computer science)

В информатике целое число это датум из интегральный тип данных, а тип данных что представляет собой классифицировать математических целые числа. Интегральные типы данных могут иметь разные размеры и могут содержать или не содержать отрицательные значения. Целые числа обычно представлены в компьютере как группа двоичных цифр (битов). Размер группировки варьируется, поэтому набор доступных целочисленных размеров варьируется для разных типов компьютеров. Компьютерное оборудование, в том числе виртуальные машины, почти всегда обеспечивают способ представления процессора регистр или адрес памяти как целое число.

Ценность и представление

В ценить элемента с целым типом - это математическое целое число, которому он соответствует. Интегральные типы могут быть беззнаковый (может представлять только неотрицательные целые числа) или подписанный (также может представлять отрицательные целые числа).[1]

Целочисленное значение обычно указывается в исходный код программы в виде последовательности цифр, необязательно с префиксом + или -. Некоторые языки программирования допускают другие обозначения, например шестнадцатеричные (основание 16) или восьмеричные (основание 8). Некоторые языки программирования также позволяют разделители групп цифр.[2]

В внутреннее представительство Это способ сохранения значения в памяти компьютера. В отличие от математических целых чисел, типичные данные в компьютере имеют минимальное и максимальное возможное значение.

Наиболее распространенное представление положительного целого числа - строка биты, с использованием двоичная система счисления. Порядок памяти байты хранение бит варьируется; видеть порядок байтов. В ширина или же точность целочисленного типа - это количество бит в его представлении. Целочисленный тип с п бит может кодировать 2п числа; например, беззнаковый тип обычно представляет неотрицательные значения от 0 до 2п−1. Иногда используются другие кодировки целочисленных значений в битовые шаблоны, например двоично-десятичный или же Код Грея, или как напечатанные коды символов, такие как ASCII.

Есть четыре известных способы представления чисел со знаком в двоичной вычислительной системе. Наиболее распространенным является два дополнения, что позволяет использовать знаковый целочисленный тип с п биты для представления чисел от -2(п−1) через 2(п−1)−1. Арифметика с дополнением до двух удобна тем, что существует идеальная индивидуальная переписка между представлениями и значениями (в частности, без отдельных +0 и -0), и поскольку добавление, вычитание и умножение не нужно различать подписанные и неподписанные типы. Другие возможности включают смещение двоичное, знак-величина, и дополнение.

Некоторые компьютерные языки определяют целочисленные размеры машинно-независимым способом; другие имеют разные определения в зависимости от размера слова процессора. Не все языковые реализации определяют переменные всех целочисленных размеров, а определенные размеры могут даже не различаться в конкретной реализации. Целое число в одном язык программирования может быть другого размера на другом языке или на другом процессоре.

Общие интегральные типы данных

БитыИмяДиапазон (при условии два дополнения за подписанный )Десятичные цифрыИспользуетРеализации
C /C ++C #Паскаль и DelphiЯваSQL[а]FORTRAND
4
клев, семиоктетПодпись: От −8 до 7, от - (23) до 23 − 1
1
Десятичное число с двоичным кодом, представление одной десятичной цифрын / дн / дн / дн / дн / дн / дн / д
Без подписи: От 0 до 15, что равно 24 − 1
2
8
байт, октет, i8, u8Подпись: От −128 до 127, от - (27) до 27 − 1
3
ASCII символы, кодовые единицы в UTF-8 кодировка символовint8_t, подписанный символ[b]сбайтShortintбайтtinyintцелое число (1)байт
Без подписи: От 0 до 255, что равно 28 − 1
3
uint8_t, беззнаковый символ[b]байтБайтн / дбеззнаковый tinyintн / дубайт
16
полуслова слово, короткие, i16, u16Подпись: От −32768 до 32767, от - (215) до 215 − 1
5
UCS-2 символы, кодовые единицы в UTF-16 кодировка символовint16_t, короткая[b], int[b]короткаяСмоллинткороткаяSmallintцелое число (2)короткая
Без подписи: От 0 до 65 535, что равно 216 − 1
5
uint16_t, без знака[b], беззнаковое целое[b]ushortСловоchar[c]беззнаковый smallintн / дushort
32
слово, длинный, двойное слово, длинное слово, int, i32, u32Подпись: Из −2 147 483 648 до 2 147 483 647, из - (231) до 231 − 1
10
UTF-32 символы, истинный цвет с альфой, FourCC, указатели в 32-битные вычисленияint32_t, int[b], длинный[b]intLongInt; Целое число[d]intintцелое число (4)int
Без подписи: От 0 до 4294967295, что равно 232 − 1
10
uint32_t, без знака[b], беззнаковое целое[b], беззнаковый длинный[b]uintLongWord; DWord; Кардинал[d]н / дбеззнаковое целоен / дuint
64
слово, двойное слово, длинное слово, длинное длинное, четверное, четверное слово, qword, int64, i64, u64Подпись: От -9,223,372,036,854,775,808 до 9,223,372,036,854,775,807, из - (263) до 263 − 1
19
Время (миллисекунды с момента Эпоха Unix ), указатели в 64-битные вычисленияint64_t, длинный[b], долго долго[b]длинныйInt64длинныйBigintцелое число (8)длинный
Без подписи: От 0 до 18 446 744 073 709 551 615, что равно 264 − 1
20
uint64_t, беззнаковый длинный длинный[b]УлонгUInt64; QWordн / дбеззнаковый bigintн / дУлонг
128
октаворд, двойное квадрослово, i128, u128Подпись: От -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, с - (2127) до 2127 − 1
39
Сложные научные расчеты,

IPv6 адреса,GUID

C: доступно только как нестандартное расширение для конкретного компиляторан / дн / дн / дн / дцелое число (16)цент[e]
Без подписи: От 0 до 340,282,366,920,938,463,463,374,607,431,768,211,455, что равно 2128 − 1
39
н / дucent[e]
п
п-битовое целое число
(общий случай)
Подпись: −(2п−1) на (2п−1 − 1)⌈(п - 1) журнал10 2⌉Ада: диапазон -2 ** (n-1) .. 2 ** (n-1) -1
Без подписи: От 0 до (2п − 1)п бревно10 2⌉Ада: диапазон 0..2 ** n-1, мод 2 ** п; Классы BigDecimal или Decimal стандартных библиотек или сторонних произвольных арифметических библиотек на многих языках, таких как Python, C ++ и т. д.

Разные Процессоры поддерживают различные интегральные типы данных. Обычно оборудование поддерживает как подписанные, так и беззнаковые типы, но только небольшой фиксированный набор значений ширины.

В приведенной выше таблице указаны значения ширины целого типа, которые аппаратно поддерживаются общими процессорами. Языки программирования высокого уровня предоставляют больше возможностей. Обычно используется целочисленный тип двойной ширины, который имеет вдвое больше битов, чем самый крупный тип, поддерживаемый оборудованием. На многих языках также есть битовое поле типы (указанное количество битов, обычно ограниченное максимальной шириной, поддерживаемой аппаратным обеспечением) и классифицировать типы (которые могут представлять только целые числа в указанном диапазоне).

Некоторые языки, например Лисп, Болтовня, REXX, Haskell, Python, и Раку поддерживать произвольная точность целые числа (также известные как целые числа бесконечной точности или же бигнумы ). Другие языки, которые не поддерживают эту концепцию в качестве конструкции верхнего уровня, могут иметь библиотеки для представления очень больших чисел с использованием массивов меньших переменных, таких как Java BigInteger класс или Perl "s"Bigint" упаковка.[5] Они используют столько памяти компьютера, сколько необходимо для хранения чисел; однако компьютер имеет ограниченный объем памяти, поэтому они также могут представлять только конечное подмножество математических целых чисел. Эти схемы поддерживают очень большие числа, например, один килобайт памяти может использоваться для хранения чисел длиной до 2466 десятичных цифр.

А Булево или же Флаг type - это тип, который может представлять только два значения: 0 и 1, обычно обозначаемый ложный и истинный соответственно. Этот тип может храниться в памяти с использованием одного бита, но часто ему дается полный байт для удобства адресации и скорости доступа.

Четырехбитная величина известна как клев (во время еды, будучи меньше кусать) или же нибель (являясь каламбуром формы слова байт). Один полубайт соответствует одной цифре в шестнадцатеричный и содержит одну цифру или знаковый код в двоично-десятичной системе счисления.

Байты и октеты

Период, термин байт изначально означало «наименьшую адресуемую единицу памяти». Раньше использовались 5-, 6-, 7-, 8- и 9-битные байты. Также были компьютеры, которые могли адресовать отдельные биты («машина с битовой адресацией») или которые могли адресовать только 16- или 32-битные величины («машина с адресацией по словам»). Период, термин байт обычно вообще не использовался в машинах с битовой и словарной адресацией.

Период, термин октет всегда относится к 8-битной величине. В основном используется в области компьютерная сеть, где могут связываться компьютеры с разной шириной байта.

В современном использовании байт почти всегда означает восемь бит, поскольку все другие размеры вышли из употребления; таким образом байт стал синонимом октет.

Слова

Термин «слово» используется для небольшой группы битов, которые одновременно обрабатываются процессорами определенного архитектура. Таким образом, размер слова зависит от процессора. Используются слова разных размеров, включая 6, 8, 12, 16, 18, 24, 32, 36, 39, 40, 48, 60 и 64 бит. Поскольку он архитектурный, размер слово обычно устанавливается первым процессором в семействе, а не характеристиками более позднего совместимого процессора. Значения терминов, полученных из слово, Такие как длинное слово, двойное слово, четырехслово, и полуслова, также различаются в зависимости от процессора и ОС.[6]

Практически все новые настольные процессоры умеют использовать 64-битные слова, хотя встроенные процессоры с 8- и 16-битным размером слова все еще распространены. В 36-битное слово было распространено в первые дни компьютеров.

Одной из важных причин непереносимости программного обеспечения является неправильное предположение, что все компьютеры имеют тот же размер слова, что и компьютер, используемый программистом. Например, если программист, использующий язык C, неправильно объявляет как int переменная, которая будет использоваться для хранения значений больше 215−1, программа выйдет из строя на компьютерах с 16-битными целыми числами. Эта переменная должна была быть объявлена ​​как длинный, который имеет как минимум 32 бита на любом компьютере. Программисты также могут ошибочно предполагать, что указатель может быть преобразован в целое число без потери информации, что может работать на (некоторых) 32-разрядных компьютерах, но не работать на 64-разрядных компьютерах с 64-разрядными указателями и 32-разрядными целыми числами. Эта проблема решена C99 в stdint.h в виде intptr_t.

Короткое целое число

А короткое целое число может представлять целое число, которое может занимать меньше места, но иметь меньший диапазон по сравнению со стандартным целым числом на той же машине.

В C, обозначается короткая. Он должен быть не менее 16 битов и часто меньше стандартного целого числа, но это не обязательно.[7][8] Соответствующая программа может предположить, что она может безопасно хранить значения между - (215−1)[9] и 215−1,[10] но он может не предполагать, что диапазон не больше. В Ява, а короткая является всегда 16-битное целое число. в Windows API, тип данных КОРОТКАЯ определяется как 16-битовое целое число со знаком на всех машинах.[6]

Распространенные короткие целые числа
Язык программированияИмя типа данныхПодписьРазмер в байтыМинимальное значениеМаксимальное значение
C и C ++короткаяподписанный2−32,767[f]+32,767
беззнаковый короткийбеззнаковый2065,535
C #короткаяподписанный2−32,768+32,767
ushortбеззнаковый2065,535
Явакороткаяподписанный2−32,768+32,767

Длинное целое

А длинное целое может представлять собой целое целое число чей классифицировать больше или равно стандартному целому числу на той же машине.

В C, обозначается длинный. Он должен быть не менее 32 бита и может быть или не быть больше стандартного целого числа. Соответствующая программа может предположить, что она может безопасно хранить значения между - (231−1)[9] и 231−1,[10] но он может не предполагать, что диапазон не больше.

Обычные длинные целые числа
Язык программированияТип утвержденияПлатформыИмя типа данныхХранение в байтыПодписано классифицироватьНеподписанный классифицировать
C ISO / ANSI C99Международный стандартUnix, 16/32-битные системы[6]
Windows, 16/32/64-битные системы[6]
длинный[грамм]4
(минимальное требование 4)
От −2 147 483 647 до +2 147 483 647От 0 до 4 294 967 295
(минимальные требования)
C ISO / ANSI C99Международный стандартUnix,
64-битные системы[6][8]
длинный[грамм]8
(минимальное требование 4)
От −9,223,372,036,854,775,807 до +9,223,372,036,854,775,807От 0 до 18 446 744 073 709 551 615
C ++ ISO / ANSIМеждународный стандартUnix, Windows,
16/32-битная система
длинный[грамм]4 [12]
(минимальное требование 4)
От −2 147 483 648 до +2 147 483 647
От 0 до 4 294 967 295
(минимальные требования)
C ++ / CLIМеждународный стандарт
ECMA-372
Unix, Windows,
16/32-битные системы
длинный[грамм]4 [13]
(минимальное требование 4)
От −2 147 483 648 до +2 147 483 647
От 0 до 4 294 967 295
(минимальные требования)
VBСтандарт компанииWindowsДлинный4 [14]От −2 147 483 648 до +2 147 483 647Нет данных
VBAСтандарт компанииWindows, Mac OS XДлинный4 [15]От −2 147 483 648 до +2 147 483 647Нет данных
SQL ServerСтандарт компанииWindowsBigInt8От −9,223,372,036,854,775,808 до +9,223,372,036,854,775,807От 0 до 18 446 744 073 709 551 615
C # / VB.NETМеждународный стандарт ECMAMicrosoft .NETдлинный или же Int648От −9,223,372,036,854,775,808 до +9,223,372,036,854,775,807От 0 до 18 446 744 073 709 551 615
ЯваМеждународный / Стандарт компанииПлатформа Javaдлинный8От −9,223,372,036,854,775,808 до +9,223,372,036,854,775,807Нет данных
Паскаль?Windows, UNIXint648От −9,223,372,036,854,775,808 до +9,223,372,036,854,775,807От 0 до 18 446 744 073 709 551 615 (тип Qword)

Долго долго

в C99 версия Язык программирования C и C ++ 11 версия C ++, а долго долго поддерживается тип, который имеет вдвое большую минимальную емкость, чем стандартный длинный. Этот тип не поддерживается компиляторами, которым требуется, чтобы код C соответствовал предыдущему стандарту C ++, C ++ 03, поскольку долго долго type не существует в C ++ 03. Для компилятора, совместимого с ANSI / ISO, минимальные требования для указанных диапазонов, то есть - (263−1)[9] до 263−1 для подписи и от 0 до 264−1 для беззнакового,[10] должно быть выполнено; однако расширение этого диапазона разрешено.[16][17] Это может быть проблемой при обмене кодом и данными между платформами или при прямом доступе к оборудованию. Таким образом, существует несколько наборов заголовков, обеспечивающих независимые от платформы типы точной ширины. C стандартная библиотека обеспечивает stdint.h; это было введено в C99 и C ++ 11.

Смотрите также

Примечания

  1. ^ Не все диалекты SQL имеют беззнаковые типы данных.[3][4]
  2. ^ а б c d е ж грамм час я j k л м п Размеры char, короткая, int, длинный и долго долго в C / C ++ зависят от реализации языка.
  3. ^ Java не поддерживает арифметику напрямую на char типы. Результаты должны быть возвращены в char из int.
  4. ^ а б Размеры Delphi's Целое число и Кардинал не гарантируются, в зависимости от платформы; обычно определяется как LongInt и LongWord соответственно.
  5. ^ а б Зарезервировано для использования в будущем. Еще не реализовано.
  6. ^ Стандарт ISO C позволяет реализациям зарезервировать значение с помощью знакового бита 1 и всех остальных битов 0 (для знакового значения и представления дополнения до двух) или со всеми битами 1 (для дополнения до единиц) для использования в качестве значения "ловушки" для обозначения (например) переполнения.[9]
  7. ^ а б c d Условия длинный и int эквивалентны[11]

Рекомендации

  1. ^ Чивер, Эрик. «Представление чисел». Swarthmore College. Получено 2011-09-11.
  2. ^ Мадхусудхан Конда (02.09.2011). «Взгляните на новые функции Java 7 - O'Reilly Radar». Radar.oreilly.com. Получено 2013-10-15.
  3. ^ «Sybase Adaptive Server Enterprise 15.5: точные числовые типы данных».
  4. ^ "Числовые типы данных MySQL 5.6".
  5. ^ "BigInteger (Java Platform SE 6)". Oracle. Получено 2011-09-11.
  6. ^ а б c d е Туман, Агнер (16.02.2010). «Соглашения о вызовах для различных компиляторов C ++ и операционных систем: Глава 3, Представление данных» (PDF). Получено 2010-08-30.
  7. ^ Жигер, Эрик (1987-12-18). «Стандарт ANSI: краткое изложение для программиста на C». Получено 2010-09-04.
  8. ^ а б Мейерс, Рэнди (2000-12-01). «Новый C: целые числа в C99, часть 1». drdobbs.com. Получено 2010-09-04.
  9. ^ а б c d «ISO / IEC 9899: 201x» (PDF). open-std.org. раздел 6.2.6.2, параграф 2. Получено 2016-06-20.
  10. ^ а б c «ISO / IEC 9899: 201x» (PDF). open-std.org. раздел 5.2.4.2.1. Получено 2016-06-20.
  11. ^ «ISO / IEC 9899: 201x» (PDF). open-std.org. Получено 2013-03-27.
  12. ^ «Фундаментальные типы в C ++». cppreference.com. Получено 5 декабря 2010.
  13. ^ «Глава 8.6.2 на странице 12» (PDF). ecma-international.org.
  14. ^ Файл справки VB 6.0
  15. ^ «Целочисленные, длинные и байтовые типы данных (VBA)». microsoft.com. Получено 2006-12-19.
  16. ^ Жигер, Эрик (18 декабря 1987 г.). «Стандарт ANSI: краткое изложение для программиста на C». Получено 2010-09-04.
  17. ^ «Американский национальный стандартный язык программирования C определяет синтаксис и семантику программ, написанных на языке программирования C». Архивировано из оригинал на 22.08.2010. Получено 2010-09-04.