stringtranslate.com

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

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

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

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

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

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

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

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

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

В некоторых старых компьютерных архитектурах использовались десятичные представления целых чисел, хранящиеся в двоично-десятичном (BCD) или другом формате. Эти значения обычно требуют размера данных 4 бита на десятичную цифру (иногда называемого полубайтом ) , обычно с дополнительными битами для знака. Многие современные процессоры обеспечивают ограниченную поддержку десятичных целых чисел как расширенного типа данных, предоставляя инструкции для преобразования таких значений в двоичные значения и обратно. В зависимости от архитектуры десятичные целые числа могут иметь фиксированные размеры (например, 7 десятичных цифр плюс знак помещаются в 32-битное слово) или могут иметь переменную длину (вплоть до некоторого максимального размера цифр), обычно занимая две цифры на байт. (октет).

Общие целочисленные типы данных

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

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

Некоторые языки, такие как Lisp , Smalltalk , REXX , Haskell , Python и Raku , поддерживают целые числа произвольной точности (также известные как целые числа бесконечной точности или bignums ). Другие языки, которые не поддерживают эту концепцию как конструкцию верхнего уровня, могут иметь библиотеки для представления очень больших чисел с использованием массивов меньших переменных, такие как класс BigInteger в Java или пакет bigint в Perl . [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-бит. Поскольку это архитектурное решение, размер слова обычно устанавливается первым ЦП в семействе, а не характеристиками более позднего совместимого ЦП. Значения терминов, производных от слова , таких как длинное слово , двойное слово , четверное слово и полуслово , также различаются в зависимости от процессора и ОС. [6]

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

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

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

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

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

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

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

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

Долго долго

В версии C99 языка программирования C и версии C ++11 поддерживается тип , который имеет двойную минимальную емкость стандарта . Этот тип не поддерживается компиляторами, которые требуют, чтобы код 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.long longlong

Синтаксис

Литералы для целых чисел могут быть записаны как обычные арабские цифры , состоящие из последовательности цифр и с отрицанием, обозначаемым знаком минус перед значением. Однако большинство языков программирования запрещают использование запятых и пробелов для группировки цифр . Примеры целочисленных литералов:

Во многих языках программирования существует несколько альтернативных методов записи целочисленных литералов:

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

Примечания

  1. ^ Не все диалекты SQL имеют беззнаковые типы данных. [3] [4]
  2. ^ abcdefghijklmn Размеры char , short , int , long и long long в C/C++ зависят от реализации языка.
  3. ^ Java напрямую не поддерживает арифметику с типами char . Результаты должны быть возвращены в char из int .
  4. ^ ab Размеры целых и кардинальных чисел Delphi не гарантируются и варьируются от платформы к платформе; обычно определяется как LongInt и LongWord соответственно.
  5. ^ ab Зарезервировано для использования в будущем. Еще не реализовано.
  6. ^ Стандарт ISO C позволяет реализациям резервировать значение с битом знака 1 и всеми остальными битами 0 (для представления знака-величины и дополнения до двух) или со всеми битами 1 (для дополнения до единиц) для использования в качестве значения «ловушки», используется для обозначения (например) переполнения. [9]
  7. ^ abcd Термины long и int эквивалентны [11]

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

  1. ^ Чивер, Эрик. «Представление чисел». Суортморский колледж . Проверено 11 сентября 2011 г.
  2. ^ Мадхусудхан Конда (2 сентября 2011 г.). «Взгляд на новые возможности Java 7 — O'Reilly Radar». Радар.oreilly.com . Проверено 15 октября 2013 г.
  3. ^ «Sybase Adaptive Server Enterprise 15.5: Точные числовые типы данных» .
  4. ^ «Числовые типы данных MySQL 5.6» .
  5. ^ «BigInteger (платформа Java SE 6)» . Оракул . Проверено 11 сентября 2011 г.
  6. ^ abcde Fog, Агнер (16 февраля 2010 г.). «Соглашения о вызовах для различных компиляторов и операционных систем C++: Глава 3, Представление данных» (PDF) . Проверено 30 августа 2010 г.
  7. ^ Жигер, Эрик (18 декабря 1987). «Стандарт ANSI: Краткое описание для программиста C» . Проверено 4 сентября 2010 г.
  8. ^ Аб Мейерс, Рэнди (1 декабря 2000 г.). «Новый C: целые числа в C99, часть 1». drdobbs.com . Проверено 4 сентября 2010 г.
  9. ^ abcd «ISO/IEC 9899:201x» (PDF) . open-std.org. раздел 6.2.6.2, пункт 2 . Проверено 20 июня 2016 г.
  10. ^ abc «ISO/IEC 9899:201x» (PDF) . open-std.org. раздел 5.2.4.2.1 . Проверено 20 июня 2016 г.
  11. ^ «ISO/IEC 9899:201x» (PDF) . open-std.org . Проверено 27 марта 2013 г.
  12. ^ «Основные типы в C++». cppreference.com . Проверено 5 декабря 2010 г.
  13. ^ «Глава 8.6.2 на странице 12» (PDF) . ecma-international.org.
  14. ^ Файл справки VB 6.0.
  15. ^ «Целочисленный, длинный и байтовый типы данных (VBA)» . microsoft.com . Проверено 19 декабря 2006 г.
  16. Жигер, Эрик (18 декабря 1987 г.). «Стандарт ANSI: Краткое описание для программиста C» . Проверено 4 сентября 2010 г.
  17. ^ «Американский национальный стандартный язык программирования C определяет синтаксис и семантику программ, написанных на языке программирования C» . Архивировано из оригинала 22 августа 2010 г. Проверено 4 сентября 2010 г.
  18. ^ Черновой вариант ECMAScript 6-го издания: https://people.mozilla.org/~jorendorff/es6-draft.html#sec-literals-numeric-literals. Архивировано 16 декабря 2013 г. на Wayback Machine.