В компьютерной науке, целое является ИГД из интегрального типа данных , с типом данных , который представляет некоторый диапазон математических чисел . Интегральные типы данных могут иметь разные размеры и могут содержать или не содержать отрицательные значения. Целые числа обычно представлены в компьютере как группа двоичных цифр (битов). Размер группировки различается, поэтому набор доступных целочисленных размеров варьируется для разных типов компьютеров. Компьютерное оборудование почти всегда позволяет представить регистр процессора или адрес памяти в виде целого числа.
Ценность и представление [ править ]
Значение какого - либо пункта с интегральным типом является математическим целым числом , что оно соответствует. Целочисленные типы могут быть беззнаковыми (способными представлять только неотрицательные целые числа) или знаковыми (способными также представлять отрицательные целые числа). [1]
Целочисленное значение обычно указывается в исходном коде программы как последовательность цифр, необязательно с префиксом + или -. Некоторые языки программирования допускают другие обозначения, такие как шестнадцатеричное (основание 16) или восьмеричное (основание 8). Некоторые языки программирования также допускают разделители групп цифр . [2]
Внутреннее представление этого элемента данных является то , как значение сохраняется в памяти компьютера. В отличие от математических целых чисел, типичные данные в компьютере имеют минимальное и максимальное возможное значение.
Наиболее распространенное представление положительного целого числа - строка битов в двоичной системе счисления . Порядок байтов памяти, в которых хранятся биты, варьируется; видеть порядок байтов . Ширина или точности интегрального типа является числом бит в его представлении. Целочисленный тип с n битами может кодировать 2 n чисел; например, беззнаковый тип обычно представляет неотрицательные значения от 0 до 2 n -1. Иногда используются другие кодировки целочисленных значений в битовые шаблоны, например двоично-десятичный код или код Грея.или в виде печатных кодов символов, таких как ASCII .
Существует четыре хорошо известных способа представления чисел со знаком в двоичной вычислительной системе. Наиболее распространенным является дополнение до двух , которое позволяет целочисленному типу со знаком с n битами представлять числа от −2 ( n −1) до 2 ( n −1) −1. Арифметика с дополнением до двух удобна тем, что существует идеальное взаимно однозначное соответствие между представлениями и значениями (в частности, нет отдельных +0 и -0), а также потому , что сложение , вычитание и умножение не должны различать подписанные и беззнаковые типы. . Другие возможности включаютдвоичное смещение , знак-величина и дополнение до единиц .
Некоторые компьютерные языки определяют целочисленные размеры машинно-независимым способом; другие имеют разные определения в зависимости от размера слова процессора. Не все языковые реализации определяют переменные всех целочисленных размеров, а определенные размеры могут даже не различаться в конкретной реализации. Целое число на одном языке программирования может иметь другой размер на другом языке или на другом процессоре.
Общие интегральные типы данных [ править ]
Биты | Имя | Диапазон (при условии , двоичное дополнение для подписано ) | Десятичные цифры | Использует | Реализации | ||||||
---|---|---|---|---|---|---|---|---|---|---|---|
C / C ++ | C # | Паскаль и Дельфи | Ява | SQL [a] | FORTRAN | D | |||||
4 | клев , semioctet | Подпись: от −8 до 7, от - (2 3 ) до 2 3 - 1 | 0,9 | Десятичное представление с двоичным кодом , одно десятичное представление | н / д | н / д | н / д | н / д | н / д | н / д | н / д |
Без знака: от 0 до 15, что равно 2 4 - 1 | 1.2 | ||||||||||
8 | байт , октет , i8, u8 | Подпись: от −128 до 127, от - (2 7 ) до 2 7 - 1 | 2.11 | Символы ASCII , кодовые единицы в кодировке символов UTF-8 | int8_t , знаковый символ [b] | сбайт | Shortint | байт | tinyint | целое число (1) | байт |
Без знака: от 0 до 255, что равно 2 8 - 1. | 2.41 | uint8_t , символ без знака [b] | байт | Байт | н / д | беззнаковый tinyint | н / д | убайт | |||
16 | полуслова, слово , короткое, i16, u16 | Подпись: от −32 768 до 32 767, от - (2 15 ) до 2 15 - 1 | 4,52 | Символы UCS-2 , кодовые единицы в кодировке символов UTF-16 | int16_t , short [b] , int [b] | короткая | Смоллинт | короткая | Smallint | целое число (2) | короткая |
Без знака: от 0 до 65 535, что равно 2 16 - 1 | 4.82 | uint16_t, беззнаковый [b] , беззнаковый int [b] | ushort | Слово | символ [c] | беззнаковый smallint | н / д | ushort | |||
32 | слово, длинное , двойное слово, длинное слово, int, i32, u32 | Подпись: от −2 147 483 648 до 2 147 483 647 , от - (2 31 ) до 2 31 - 1 | 9,33 | Символы UTF-32 , истинный цвет с альфа- каналом , FourCC , указатели в 32-битных вычислениях | int32_t , int [b] , long [b] | int | LongInt ; Целое число [d] | int | int | целое число (4) | int |
Без знака: от 0 до 4 294 967 295, что равно 2 32 - 1. | 9,63 | uint32_t, unsigned [b] , unsigned int [b] , unsigned long [b] | uint | LongWord ; DWord ; Кардинал [d] | н / д | беззнаковое целое | н / д | uint | |||
64 | слово, двойное слово, длинное слово, длинное длинное, четверное, четверное слово, qword, int64, i64, u64 | Подпись: от -9 223 372 036 854 775 808 до 9 223 372 036 854 775 807 , от - (2 63 ) до 2 63 - 1 | 18,96 | Время (миллисекунды с эпохи Unix ), указатели в 64-битных вычислениях | int64_t , long [b] , long long [b] | длинная | Int64 | длинная | Bigint | целое число (8) | длинная |
Без знака: от 0 до 18 446 744 073 709 551 615, что равно 2 64 - 1. | 19,27 | 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, с - (2 127 ) до 2 127 - 1 | 38,23 | Сложные научные расчеты, Адреса IPv6 , GUID | C: доступно только как нестандартное расширение для конкретного компилятора | н / д | н / д | н / д | н / д | целое число (16) | цент [е] |
Без подписи: от 0 до 340 282 366 920 938 463 463 374 607 431 768 211 455, что равно 2 128 - 1. | 38,53 | н / д | ucent [e] | ||||||||
п | n -битное целое число (общий случай) | Подписано: от - (2 n −1 ) до (2 n −1 - 1) | ( n - 1) журнал 10 2 | Ada : диапазон -2 ** (n-1) .. 2 ** (n-1) -1 | |||||||
Без знака: от 0 до (2 n - 1) | п журнал 10 2 | Ada: диапазон 0..2 ** n-1 , mod 2 ** n ; Классы BigDecimal или Decimal стандартных библиотек или сторонних произвольных арифметических библиотек на многих языках, таких как Python, C ++ и т. д. |
Разные ЦП поддерживают разные интегральные типы данных. Обычно оборудование поддерживает как подписанные, так и беззнаковые типы, но только небольшой фиксированный набор значений ширины.
В приведенной выше таблице перечислены значения ширины целого типа, которые аппаратно поддерживаются общими процессорами. Языки программирования высокого уровня предоставляют больше возможностей. Обычно используется целочисленный тип с двойной шириной, который имеет вдвое больше битов, чем самый крупный тип, поддерживаемый аппаратным обеспечением. Во многих языках также есть типы битовых полей (указанное количество битов, обычно ограничиваемое максимальной шириной, поддерживаемой аппаратным обеспечением) и типы диапазонов (которые могут представлять только целые числа в указанном диапазоне).
Некоторые языки, такие как Lisp , Smalltalk , REXX , Haskell , Python и Raku, поддерживают целые числа произвольной точности (также известные как целые числа бесконечной точности или большие числа ). Другие языки , которые не поддерживают эту концепцию в качестве конструкции верхнего уровня может иметь библиотеки , доступные для представления очень больших чисел с использованием массивов меньших переменными, такими , как в Java BigInteger класс или Perl «s„ BigInt пакет“. [5]Они используют столько памяти компьютера, сколько необходимо для хранения чисел; однако у компьютера есть только конечный объем памяти, поэтому они также могут представлять только конечное подмножество математических целых чисел. Эти схемы поддерживают очень большие числа, например, один килобайт памяти может использоваться для хранения чисел длиной до 2466 десятичных цифр.
Тип Boolean или Flag - это тип, который может представлять только два значения: 0 и 1, обычно идентифицируемые как false и true соответственно. Этот тип может храниться в памяти с использованием одного бита, но часто ему дается полный байт для удобства адресации и скорости доступа.
Четырехбитная величина известна как полубайт (при еде, меньший, чем укус ) или полубайт (каламбур на форме байта слова ). Один полубайт соответствует одной цифре в шестнадцатеричной системе счисления и содержит одну цифру или знаковый код в десятичной двоичной системе счисления.
Байты и октеты [ править ]
Термин « байт» изначально означал «наименьшую адресуемую единицу памяти». Раньше использовались 5-, 6-, 7-, 8- и 9-битные байты. Также были компьютеры, которые могли адресовать отдельные биты («машина с битовой адресацией») или которые могли адресовать только 16- или 32-битные величины («машина с адресацией по словам»). Термин « байт» обычно вообще не использовался в связи с машинами с битовой и словарной адресацией.
Термин октет всегда относится к 8-битовой величине. Он в основном используется в области компьютерных сетей , где компьютеры с разной шириной байта могут взаимодействовать.
В современном использовании байт почти всегда означает восемь бит, поскольку все другие размеры вышли из употребления; таким образом, байт стал синонимом октета .
Слова [ править ]
Термин «слово» используется для небольшой группы битов, которые одновременно обрабатываются процессорами определенной архитектуры . Таким образом, размер слова зависит от процессора. Используются слова разных размеров, включая 6, 8, 12, 16, 18, 24, 32, 36, 39, 40, 48, 60 и 64 бит. Поскольку это архитектурно, размер слова обычно устанавливается первым процессором в семействе, а не характеристиками более позднего совместимого процессора. Значения терминов , полученные из слова , такие как LongWord , двойное слово , четверное слово , и полуслово , также изменяются в зависимости от процессора и операционной системой. [6]
Практически все новые настольные процессоры способны использовать 64-битные слова, хотя встроенные процессоры с 8- и 16-битным размером слова все еще распространены. 36-битная длина слова была распространена в первые дни компьютеров.
Одной из важных причин непереносимости программного обеспечения является неправильное предположение, что все компьютеры имеют тот же размер слова, что и компьютер, используемый программистом. Например, если программист, использующий язык C, неправильно объявляет как int переменную, которая будет использоваться для хранения значений больше 2 15 -1, программа завершится ошибкой на компьютерах с 16-битными целыми числами. Эта переменная должна была быть объявлена как длинная , имеющая не менее 32 бита на любом компьютере. Программисты также могут ошибочно предполагать, что указатель может быть преобразован в целое число без потери информации, что может работать на (некоторых) 32-разрядных компьютерах, но не работать на 64-разрядных компьютерах с 64-разрядными указателями и 32-разрядными целыми числами. Эта проблема решена C99 в stdint.h в видеintptr_t
.
Короткое целое [ править ]
Короткое целое может представлять собой целое число , которое может принимать меньше памяти, в то время как имеющую меньший диапазон, по сравнению со стандартным целым числом на ту же машину.
В языке C он обозначается коротким . Он должен быть не менее 16 бит и часто меньше стандартного целого числа, но это не обязательно. [7] [8] Соответствующая программа может предполагать, что она может безопасно хранить значения между - (2 15 -1) [9] и 2 15 -1, [10], но не может предполагать, что диапазон не больше. В Java , короткое это всегда 16-разрядное целое число. В Windows API тип данных SHORT определяется как 16-разрядное целое число со знаком на всех машинах. [6]
Язык программирования | Имя типа данных | Подпись | Размер в байтах | Минимальное значение | Максимальное значение |
---|---|---|---|---|---|
C и C ++ | короткая | подписанный | 2 | -32 767 [f] | +32 767 |
беззнаковый короткий | беззнаковый | 2 | 0 | 65 535 | |
C # | короткая | подписанный | 2 | −32 768 | +32 767 |
ushort | беззнаковый | 2 | 0 | 65 535 | |
Ява | короткая | подписанный | 2 | −32 768 | +32 767 |
Длинное целое [ править ]
Длинное целое может представлять собой целое число , чей диапазон больше или равен стандартного целое число на ту же машину.
В языке C он обозначается длинным . Он должен быть не менее 32 бита и может быть или не быть больше стандартного целого числа. Соответствующая программа может предполагать, что она может безопасно хранить значения от - (2 31 -1) [9] до 2 31 -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 | Стандарт компании | Окна | Длинная | 4 [14] | От −2 147 483 648 до +2 147 483 647 | N / A |
VBA | Стандарт компании | Windows , Mac OS X | Длинная | 4 [15] | От −2 147 483 648 до +2 147 483 647 | N / A |
SQL Server | Стандарт компании | Окна | BigInt | 8 | От −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 | Международный стандарт ECMA | Microsoft .NET | long или Int64 | 8 | От −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 | N / A |
Паскаль | ? | Windows , UNIX | int64 | 8 | От −9,223,372,036,854,775,808 до +9,223,372,036,854,775,807 | От 0 до 18 446 744 073 709 551 615 (тип Qword) |
Длинный длинный [ править ]
В С99 версии языка C программирования и C ++ 11 версии C ++ , long long
тип поддерживается , который имеет двойную минимальную мощность стандарта long
. Этот тип не поддерживается компиляторами, которым требуется, чтобы код C был совместим с предыдущим стандартом C ++, C ++ 03, поскольку тип long long не существовал в C ++ 03. Для компилятора, совместимого с ANSI / ISO, минимальные требования для указанных диапазонов, то есть от - (2 63 -1) [9] до 2 63 -1 для подписанных и от 0 до 2 64 -1 для беззнаковых, [10] должны быть выполненным; тем не менее, расширение этого диапазона разрешено. [16][17] Это может быть проблемой при обмене кодом и данными между платформами или при прямом доступе к оборудованию. Таким образом, существует несколько наборов заголовков, обеспечивающих независимые от платформы типы точной ширины. Стандартная библиотека Cпредоставляет stdint.h ; это было введено в C99 и C ++ 11.
См. Также [ править ]
- Арифметика произвольной точности
- Десятичное число с двоичным кодом (BCD)
- Типы данных C
- Целочисленное переполнение
- Знаковые представления чисел
Заметки [ править ]
- ^ Не все диалекты SQL имеют беззнаковые типы данных. [3] [4]
- ^ a b c d e f g h i j k l m n Размеры char , short , int , long и long long в C / C ++ зависят от реализации языка.
- ^ Java не поддерживает прямую арифметику длятипов char . Результаты должны быть возвращены в char из int .
- ^ a b Размеры Delphi's Integer и Cardinal не гарантируются и зависят от платформы; обычно определяется как LongInt и LongWord соответственно.
- ^ a b Зарезервировано для использования в будущем. Еще не реализовано.
- ^ Стандарт ISO C позволяет реализациям зарезервировать значение с помощью знакового бита 1 и всех других битов 0 (для знакового значения и представления дополнения до двух) или со всеми битами 1 (для дополнения до единиц) для использования в качестве значения "ловушки", используется для обозначения (например) переполнения. [9]
- ^ a b c d Термины long и int эквивалентны [11]
Ссылки [ править ]
- ^ Чивер, Эрик. «Представление чисел» . Свортмор-колледж . Проверено 11 сентября 2011 .
- ^ Madhusudhan Конда (2011-09-02). «Взгляните на новые возможности Java 7 - O'Reilly Radar» . Radar.oreilly.com . Проверено 15 октября 2013 .
- ^ «Sybase Adaptive Server Enterprise 15.5: точные числовые типы данных» .
- ^ "MySQL 5.6 Числовые типы данных" .
- ^ «BigInteger (Java Platform SE 6)» . Oracle . Проверено 11 сентября 2011 .
- ^ a b c d e Туман, Агнер (16 февраля 2010 г.). «Соглашения о вызовах для различных компиляторов C ++ и операционных систем: Глава 3, Представление данных» (PDF) . Проверено 30 августа 2010 .
- ^ Giguere, Эрик (1987-12-18). «Стандарт ANSI: Резюме для программиста на C» . Проверено 4 сентября 2010 .
- ^ a b Мейерс, Рэнди (2000-12-01). «Новый C: целые числа в C99, часть 1» . drdobbs.com . Проверено 4 сентября 2010 .
- ^ a b c d "ISO / IEC 9899: 201x" (PDF) . open-std.org. раздел 6.2.6.2, параграф 2 . Проверено 20 июня 2016 .
- ^ a b c «ISO / IEC 9899: 201x» (PDF) . open-std.org. раздел 5.2.4.2.1 . Проверено 20 июня 2016 .
- ^ «ISO / IEC 9899: 201x» (PDF) . open-std.org . Проверено 27 марта 2013 .
- ^ «Основные типы в C ++» . cppreference.com . Проверено 5 декабря 2010 года .
- ^ «Глава 8.6.2 на странице 12» (PDF) . ecma-international.org.
- ^ Файл справки VB 6.0
- ^ «Целочисленные, длинные и байтовые типы данных (VBA)» . microsoft.com . Проверено 19 декабря 2006 .
- ^ Giguere, Эрик (18 декабря 1987). «Стандарт ANSI: Резюме для программиста на C» . Проверено 4 сентября 2010 .
- ^ «Американский национальный стандартный язык программирования C определяет синтаксис и семантику программ, написанных на языке программирования C» . Архивировано из оригинала на 2010-08-22 . Проверено 4 сентября 2010 .