Из Википедии, свободной энциклопедии
  (Перенаправлено из Longword )
Перейти к навигации Перейти к поиску

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

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

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

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

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

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

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

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

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

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

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

Некоторые языки, такие как 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 он обозначается длинным . Он должен быть не менее 32 бита и может быть или не быть больше стандартного целого числа. Соответствующая программа может предполагать, что она может безопасно хранить значения от - (2 31 -1) [9] до 2 31 -1, [10], но не может предполагать, что диапазон не больше.

Длинный длинный [ править ]

В С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
  • Целочисленное переполнение
  • Знаковые представления чисел

Заметки [ править ]

  1. ^ Не все диалекты SQL имеют беззнаковые типы данных. [3] [4]
  2. ^ a b c d e f g h i j k l m n Размеры char , short , int , long и long long в C / C ++ зависят от реализации языка.
  3. ^ Java не поддерживает прямую арифметику длятипов char . Результаты должны быть возвращены в char из int .
  4. ^ a b Размеры Delphi's Integer и Cardinal не гарантируются и зависят от платформы; обычно определяется как LongInt и LongWord соответственно.
  5. ^ a b Зарезервировано для использования в будущем. Еще не реализовано.
  6. ^ Стандарт ISO C позволяет реализациям зарезервировать значение с помощью знакового бита 1 и всех других битов 0 (для знакового значения и представления дополнения до двух) или со всеми битами 1 (для дополнения до единиц) для использования в качестве значения "ловушки", используется для обозначения (например) переполнения. [9]
  7. ^ a b c d Термины long и int эквивалентны [11]

Ссылки [ править ]

  1. ^ Чивер, Эрик. «Представление чисел» . Свортмор-колледж . Проверено 11 сентября 2011 .
  2. ^ Madhusudhan Конда (2011-09-02). «Взгляните на новые возможности Java 7 - O'Reilly Radar» . Radar.oreilly.com . Проверено 15 октября 2013 .
  3. ^ «Sybase Adaptive Server Enterprise 15.5: точные числовые типы данных» .
  4. ^ "MySQL 5.6 Числовые типы данных" .
  5. ^ «BigInteger (Java Platform SE 6)» . Oracle . Проверено 11 сентября 2011 .
  6. ^ a b c d e Туман, Агнер (16 февраля 2010 г.). «Соглашения о вызовах для различных компиляторов C ++ и операционных систем: Глава 3, Представление данных» (PDF) . Проверено 30 августа 2010 .
  7. ^ Giguere, Эрик (1987-12-18). «Стандарт ANSI: Резюме для программиста на C» . Проверено 4 сентября 2010 .
  8. ^ a b Мейерс, Рэнди (2000-12-01). «Новый C: целые числа в C99, часть 1» . drdobbs.com . Проверено 4 сентября 2010 .
  9. ^ a b c d "ISO / IEC 9899: 201x" (PDF) . open-std.org. раздел 6.2.6.2, параграф 2 . Проверено 20 июня 2016 .
  10. ^ a b c «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. ^ Giguere, Эрик (18 декабря 1987). «Стандарт ANSI: Резюме для программиста на C» . Проверено 4 сентября 2010 .
  17. ^ «Американский национальный стандартный язык программирования C определяет синтаксис и семантику программ, написанных на языке программирования C» . Архивировано из оригинала на 2010-08-22 . Проверено 4 сентября 2010 .