Целочисленные типы данных
Почти все целочисленные типы данных относятся к порядковым типам. Эти типы данных представляют целые числа в определённом диапазоне. Конкретные наименования целочисленных типов и диапазоны значений зависят от конкретного языка программирования, от компилятора и от режима компиляции. Подробнее об этом надо узнавать в документации на компилятор.
Например, тип данных Integer в Delphi имеет диапазон -2147483648…2147483647, в то время как в Turbo Pascal тип данных Integer представляет числа в диапазоне -35768…32767. В Free Pascal диапазон значений типа Integer определяется выбранным режимом.
Так как Lazarus использует компилятор Free Pascal, то всё сказанное о типах данных по отношению к Free Pascal справедливо и для Lazarus.
Итак, целочисленные типы данных Free Pascal перечислены в таблице 13.1.
Таблица 13.1. Целочисленные типы данных Free Pascal (Lazarus).
| Тип | Размер, байт | Диапазон значений |
| Byte | 1 | 0…255 |
| Shortint | 1 | -128…127 |
| Smallint | 2 | -35768…32767 |
| Word | 2 | 0…65535 |
| Integer | 2 или 4 | Зависит от режима компиляции |
| Cardinal | 4 | 0…4294967295 |
| Longint | 4 | -2147483648…2147483647 |
| Longword | 4 | 0. 4294967295 |
| Int64 | 8 | -9223372036854775808. 9223372036854775807 |
| QWord | 8 | 0. 18446744073709551615 |
ПРИМЕЧАНИЕ
В Free Pascal типы Int64 и QWord не являются порядковыми! Это означает, что вы не можете использовать их, например, для индексных переменных в циклах. Однако я привёл их здесь, чтобы отдельно не описывать в будущем и собрать в одном месте все целочисленные типы Free Pascal. Если какие-то слова вам не понятны — не пугайтесь. В своё время я обо всём расскажу подробнее.
А теперь несколько пояснений к таблице.
В колонке ТИП приведены идентификаторы типов данных (ключевые слова, которые указывают компилятору, к какому типу относятся те или иные данные). Как использовать эти идентификаторы, вы узнаете в следующих уроках.
В колонке РАЗМЕР указан размер, который занимает тип данных в памяти компьютера. Например, целое положительное число можно представить разными типами: Byte, Word, Cardinal и др. Однако число типа Cardinal будет занимать в памяти 4 байта, в то время как число типа Byte – всего лишь 1 байт. Поэтому, если вы точно знаете, что число, с которым вы работаете, никогда не примет значение больше 255, то лучше определять его как тип Byte, так как это позволит сэкономить место в памяти компьютера. Хотя здесь не всё так однозначно (нюансы распределения памяти и других ресурсов компьютера выходят за рамки данного курса).
В колонке ДИАПАЗОН указан диапазон значений, которым оперирует тип данных. Например, число типа Byte может принимать значения от 0 до 255.
А теперь практика. Напишем программу, которая выводит на экран диапазоны значений всех целочисленных типов данных. Исходный код этой программы приведён ниже:
Стандартная функция Low определяет минимальное значение типа данных. Фунцкия High определяет максимальное значение. С функциями WriteLn и ReadLn вы уже немного знакомы. Более подробно о подпрограммах (процедурах и функциях) мы будем говорить в соответствующем разделе курса.
Напоследок скажу, как записываются целочисленные данные в программе. Да также как и везде — просто пишите число, без кавычек и каких-либо дополнительных символов. Например, так
Правда, это относится к числам в десятичной системе счисления. Наверняка вы уже знаете, что есть и другие системы. Наиболее широко распространены двоичная, десятичная и шестнадцатеричная системы счисления.
Free Pascal поддерживает четыре формата записи целого числа:
- Десятичная запись. Просто число, например 10.
- Шестнадцатеричная запись. Число с префиксом $. Например, шестнадцатеричное число $10 равно десятичному 16.
- Восьмеричная запись. Число с префиксом &. Например, восьмеричное число &10 равно десятичному 8.
- Двоичная запись. Число с префиксом %. Например, двоичное число %10 равно десятичному 2.
Если для вас это пока слишком сложно, то пропустите эту часть. Просто добавьте страницу в закладки и вернётесь к ней когда будет нужно.
Домашнее задание:
Создайте программу, которая выводит на экран диапазоны значений целых чисел (листинг 13.1). Откомпилируйте программу и запустите её. Убедитесь, что эти значения соответствуют указанным в таблице 13.1.
В исходном коде программы найдите строку, которая задаёт режим компиляции:
В этой строке вместо слова objfpc напишите слово tp. То есть итоговая строка должна выглядеть так:
Запустите программу. Посмотрите диапазон значений типа Integer. Сделайте выводы.
Учитесь думать как программист, то есть логически. Никто вам до пенсии не будет всё разжёвывать, как это делаю сейчас я. Надо привыкать думать самостоятельно. Иначе вы скатитесь к “обезьяньему принципу обучения”, и тогда ваши шансы стать классным программистом приблизятся к нулю. Чтобы помочь вам не скатиться на уровень “зубрёжки”, я буду периодически оставлять пробелы в вашем обучении, чтобы вы постарались сами додуматься до каких-то вещей.
Намного лучше, если вы сами додумаетесь до неправильного решения, сами найдёте ошибку и сами её исправите, чем будете всегда использовать чужие правильные решения и тупо их копировать.
Типы данных в C++
В этом руководстве мы узнаем об основных типах данных, таких как int, float, char и т.д. в программировании на C++, с помощью примеров.
Что такое типы данных в C++?
Типа данных в C++ – это объявления переменных. Они определяют тип и размер данных, связанных с переменными. Например:
Здесь age – переменная типа int, это означает, что переменная может хранить только целые числа размером 2 или 4 байта.
Основные типы данных
В таблице ниже показаны основные типы данных в C++, их значение и размеры (в байтах):
| Тип данных | Значение | Размер (в байтах) |
|---|---|---|
| int | Целое число | 2 или 4 |
| float | Плавающая точка | 4 |
| double | Двойная плавающая точка | 8 |
| char | символ | 1 |
| wchar_t | Широкий характер | 2 |
| bool | Булево | 1 |
| void | Пустой |
Теперь давайте обсудим эти фундаментальные типы данных более подробно.
1. int
- Ключевое слово int в С++ используется для обозначения целых чисел.
- Его размер обычно составляет 4 байта. Это означает, что он может хранить значения от -2147483648 до 2147483647.
- Например:
2. float и double
- float и double используются для хранения чисел с плавающей запятой (десятичных и экспонент).
- Размер числа с плавающей запятой составляет 4 байта, а размер double – 8 байтов. Следовательно, точность double в два раза выше, чем у float. Чтобы узнать больше, посетите C ++ float и double.
- Например,
Как упоминалось выше, эти два типа данных также используются для экспонента. Например:
3. char
- Ключевое слово char используется для символов.
- Его размер составляет 1 байт.
- В C++ символы заключаются в одинарные кавычки ”.
- Например:
Примечание. В С++ целочисленное значение хранится в переменной типа char, а не в самом символе.
4. wchar_t
- Широкий символ wchar_t похож на тип данных char, за исключением того, что его размер составляет 2 байта вместо 1.
- Он используется для представления символов, для использования которых требуется больше памяти, чем для одного символа.
- Например:
Обратите внимание на букву L перед кавычками.
Примечание. В C++ 11 также представлены два других типа символов фиксированного размера – char16_t и char32_t.
5. bool
- Тип данных bool имеет одно из двух возможных значений: true или false.
- Логические значения используются в условных операторах и циклах.
- Например:
6. void
- Ключевое слово void указывает на отсутствие данных. Это означает «ничего» или «не имеет значения».
- Мы будем использовать void, когда узнаем о функциях и указателях.
Примечание. Мы не можем объявлять переменные типа void.
Модификаторы типа
Мы можем дополнительно изменить некоторые из основных типов данных с помощью модификаторов типов. В C++ есть 4 модификатора типа:
- signed;
- unsigned;
- short;
- long.
Мы можем изменить следующие типы данных с помощью вышеуказанных модификаторов:
- int;
- double;
- char.
Список измененных типов данных
| Тип данных | Размер (в байтах) | Значение |
|---|---|---|
| signed int | 4 | используется для целых чисел (эквивалентно int) |
| unsigned int | 4 | может хранить только положительные целые числа |
| short | 2 | используется для небольших целых чисел (от -32768 до 32767) |
| long | не менее 4 | используется для больших целых чисел (эквивалент long int) |
| unsigned long | 4 | используется для больших положительных целых чисел или 0 (эквивалент unsigned long int) |
| long long | 8 | используется для очень больших целых чисел (эквивалент long long int) |
| unsigned long long | 8 | используется для очень больших положительных целых чисел или 0 (эквивалент unsigned long long int) |
| long double | 12 | используется для больших чисел с плавающей запятой |
| signed char | 1 | используется для символов (гарантированный диапазон от -127 до 127) |
| unsigned char | 1 | используется для символов (от 0 до 255) |
Посмотрим на несколько примеров.
Производные типы данных
Типы данных, производные от основных типов данных, являются производными типами. Например: массивы, указатели, типы функций, структуры и т.д.
Типы данных

Типы данных имеют особенное значение в C#, поскольку это строго типизированный язык. Это означает, что все операции подвергаются строгому контролю со стороны компилятора на соответствие типов, причем недопустимые операции не компилируются. Следовательно, строгий контроль типов позволяет исключить ошибки и повысить надежность программ. Для обеспечения контроля типов все переменные, выражения и значения должны принадлежать к определенному типу. Такого понятия, как «бестиповая» переменная, в данном языке программирования вообще не существует. Более того, тип значения определяет те операции, которые разрешается выполнять над ним. Операция, разрешенная для одного типа данных, может оказаться недопустимой для другого.
В C# имеются две общие категории встроенных типов данных: типы значений и ссылочные типы. Они отличаются по содержимому переменной. Концептуально разница между ними состоит в том, что тип значения (value type) хранит данные непосредственно, в то время как ссылочный тип (reference type) хранит ссылку на значение.
Эти типы сохраняются в разных местах памяти: типы значений сохраняются в области, известной как стек, а ссылочные типы — в области, называемой управляемой кучей.

Давайте разберем типы значений.
Целочисленные типы
В C# определены девять целочисленных типов: char, byte, sbyte, short, ushort, int, uint, long и ulong. Но тип char применяется, главным образом, для представления символов и поэтому рассматривается отдельно. Остальные восемь целочисленных типов предназначены для числовых расчетов. Ниже представлены их диапазон представления чисел и разрядность в битах:
| Тип | Тип CTS | Разрядность в битах | Диапазон |
|---|---|---|---|
| byte | System.Byte | 8 | 0:255 |
| sbyte | System.SByte | 8 | -128:127 |
| short | System.Int16 | 16 | -32768 : 32767 |
| ushort | System.UInt16 | 16 | 0 : 65535 |
| int | System.Int32 | 32 | -2147483648 : 2147483647 |
| uint | System.UInt32 | 32 | 0 : 4294967295 |
| long | System.Int64 | 64 | -9223372036854775808 : 9223372036854775807 |
| ulong | System.UInt64 | 64 | 0 : 18446744073709551615 |
Как следует из приведенной выше таблицы, в C# определены оба варианта различных целочисленных типов: со знаком и без знака. Целочисленные типы со знаком отличаются от аналогичных типов без знака способом интерпретации старшего разряда целого числа. Так, если в программе указано целочисленное значение со знаком, то компилятор C# сгенерирует код, в котором старший разряд целого числа используется в качестве флага знака. Число считается положительным, если флаг знака равен 0, и отрицательным, если он равен 1.
Отрицательные числа практически всегда представляются методом дополнения до двух, в соответствии с которым все двоичные разряды отрицательного числа сначала инвертируются, а затем к этому числу добавляется 1.
Вероятно, самым распространенным в программировании целочисленным типом является тип int. Переменные типа int нередко используются для управления циклами, индексирования массивов и математических расчетов общего назначения. Когда же требуется целочисленное значение с большим диапазоном представления чисел, чем у типа int, то для этой цели имеется целый ряд других целочисленных типов.
Так, если значение нужно сохранить без знака, то для него можно выбрать тип uint, для больших значений со знаком — тип long, а для больших значений без знака — тип ulong. В качестве примера ниже приведена программа, вычисляющая расстояние от Земли до Солнца в сантиметрах. Для хранения столь большого значения в ней используется переменная типа long:
Всем целочисленным переменным значения могут присваиваться в десятичной или шестнадцатеричной системе обозначений. В последнем случае требуется префикс 0x:
Если возникает какая-то неопределенность относительно того, имеет ли целое значение тип int, uint, long или ulong, то по умолчанию принимается int. Чтобы явно специфицировать, какой другой целочисленный тип должно иметь значение, к числу можно добавлять следующие символы:
U и L можно также указывать в нижнем регистре, хотя строчную L легко зрительно спутать с цифрой 1 (единица).
Типы с плавающей точкой
Типы с плавающей точкой позволяют представлять числа с дробной частью. В C# имеются две разновидности типов данных с плавающей точкой: float и double. Они представляют числовые значения с одинарной и двойной точностью соответственно. Так, разрядность типа float составляет 32 бита, что приближенно соответствует диапазону представления чисел от 5E-45 до 3,4E+38. А разрядность типа double составляет 64 бита, что приближенно соответствует диапазону представления чисел от 5E-324 до 1,7Е+308.
Тип данных float предназначен для меньших значений с плавающей точкой, для которых требуется меньшая точность. Тип данных double больше, чем float, и предлагает более высокую степень точности (15 разрядов).
Если нецелочисленное значение жестко кодируется в исходном тексте (например, 12.3), то обычно компилятор предполагает, что подразумевается значение типа double. Если значение необходимо специфицировать как float, потребуется добавить к нему символ F (или f):
Десятичный тип данных
Для представления чисел с плавающей точкой высокой точности предусмотрен также десятичный тип decimal, который предназначен для применения в финансовых расчетах. Этот тип имеет разрядность 128 бит для представления числовых значений в пределах от 1Е-28 до 7,9Е+28. Вам, вероятно, известно, что для обычных арифметических вычислений с плавающей точкой характерны ошибки округления десятичных значений. Эти ошибки исключаются при использовании типа decimal, который позволяет представить числа с точностью до 28 (а иногда и 29) десятичных разрядов. Благодаря тому что этот тип данных способен представлять десятичные значения без ошибок округления, он особенно удобен для расчетов, связанных с финансами:
Результатом работы данной программы будет:

Символы
В C# символы представлены не 8-разрядным кодом, как во многих других языках программирования, например С++, а 16-разрядным кодом, который называется юникодом (Unicode). В юникоде набор символов представлен настолько широко, что он охватывает символы практически из всех естественных языков на свете. Если для многих естественных языков, в том числе английского, французского и немецкого, характерны относительно небольшие алфавиты, то в ряде других языков, например китайском, употребляются довольно обширные наборы символов, которые нельзя представить 8-разрядным кодом. Для преодоления этого ограничения в C# определен тип char, представляющий 16-разрядные значения без знака в пределах от 0 до 65 535. При этом стандартный набор символов в 8-разрядном коде ASCII является подмножеством юникода в пределах от 0 до 127. Следовательно, символы в коде ASCII по-прежнему остаются действительными в C#.
Для того чтобы присвоить значение символьной переменной, достаточно заключить это значение (т.е. символ) в одинарные кавычки:
Несмотря на то что тип char определен в C# как целочисленный, его не следует путать со всеми остальными целочисленными типами. Дело в том, что в C# отсутствует автоматическое преобразование символьных значений в целочисленные и обратно. Например, следующий фрагмент кода содержит ошибку:
Наравне с представлением char как символьных литералов, их можно представлять как 4-разрядные шестнадцатеричные значения Unicode (например, ‘\u0041’), целочисленные значения с приведением (например, (char) 65) или же шестнадцатеричные значения (например, ‘\x0041’). Кроме того, они могут быть представлены в виде управляющих последовательностей.
Логический тип данных
Тип bool представляет два логических значения: «истина» и «ложь». Эти логические значения обозначаются в C# зарезервированными словами true и false соответственно. Следовательно, переменная или выражение типа bool будет принимать одно из этих логических значений. Кроме того, в C# не определено взаимное преобразование логических и целых значений. Например, 1 не преобразуется в значение true, а 0 — в значение false.