Тип int – целые числа
Если вы хотите хранить в переменных целые числа , вам нужно использовать тип int .
int — это сокращение от Int eger ( целый с английского), что как бы намекает, что этот тип позволяет хранить целые числа .
Переменные типа int способны хранить целые числа в диапазоне от — 2 миллиарда до + 2 миллиарда . Или, если быть более точным, то от — 2,147,483,648 до 2,147,483,647 .
Такие некруглые значения связаны с устройством памяти компьютера.
В Java для типа int выделено 4 байта памяти. Каждый байт памяти состоит из 8 битов . Каждый бит может принимать только 2 значения — 0 или 1. Переменная типа int содержит 32 бита и может принимать 4,294,967,296 значений.
Половину этого диапазона отдали под отрицательные числа, а вторую — под положительные. Вот и получилось как раз от — 2,147,483,648 до 2,147,483,647 .
2. Создание переменной типа int
Тип int предназначен для хранения целых чисел. Чтобы создать в коде переменную, которая будет способна хранить целые числа , нужно воспользоваться командой вида:
Где имя — это имя переменной. Примеры:
Команда | Описание |
---|---|
Создается целочисленная переменная x | |
Создается целочисленная переменная count | |
Создается целочисленная переменная currentYear |
Размер (регистр) букв имеет значение: команды int c olor и int C olor объявят две разные переменные.
Команды же Int Color и INT COLOR компилятор вообще не поймет и сообщит об ошибке. int — это специальное слово, обозначающее целый тип, и пишется оно только строчными буквами .
3. Краткая запись создания переменных
Если в одном месте программы нужно создать много переменных одного типа, это можно сделать, используя сокращенную запись:
Команды | Краткая запись тех же команд |
---|
4. Присваивание значений
Чтобы занести значение в переменную типа int , нужно воспользоваться командой:
Где значением может быть любое целочисленное выражение. Примеры:
Команда | Примечание |
---|---|
Не скомпилируется, т.к. 3,000,000,000 больше, чем максимально возможное значение типа int 2,147,483,647 |
5. Сокращенная запись создания и инициализации переменной
Создание (объявление) переменной и присваивание ей значения можно записать одной командой. Чаще всего так и делают, т. к. переменная обычно объявляется тогда, когда возникает необходимость сохранить какое-либо значение.
Выглядит эта команда так:
Команда | Примечание |
---|---|
В переменной будет значение «2 миллиарда» | |
В переменной будет значение «минус 10 миллионов» | |
Не скомпилируется, т. к. 3,000,000,000 больше, чем максимально возможное значение типа int: 2,147,483,647 |
Можно объявить и несколько переменных одной строкой. Тогда команда будет иметь вид:
Типы данных С++
Язык программирования С++ является расширяемым языком программирования. Понятие расширяемый означает то, что кроме основных (встроенных) типов данных, можно создавать свои типы данных. Поэтому в С++ существует огромное количество типов данных.
Логический тип данных bool
Тип данных bool — целочисленный тип данных, так как диапазон допустимых значений — целые числа от 0 до 255. Тип bool используется исключительно для хранения результатов логических выражений. У логического выражения может быть один из двух результатов: true — если логическое выражение истинно, false — если логическое выражение ложно.
Константе true эквивалентны все числа от 1 до 255 включительно, тогда как константе false эквивалентно только одно целое число — 0.
Символьный тип
Данные символьного типа используется для представления символов. Данные символьного типа в памяти компьютера всегда занимают 1 байт. Это связано с тем, что обычно под величину символьного типа отводят столько памяти, сколько необходимо для хранения любого из 256 символов клавиатуры. Все закодированные символы представлены в таблице ASCII (от англ. American Standard Code for Information Interchange — американский стандартный код для обмена информацией).
Символьный тип может быть со знаком или без знака. В величинах со знаком signed char можно хранить значения в диапазоне от -128 до 127. Соответственно значения переменных типа unsigned char могут находиться в диапазоне от 0 до 255.
Тип данных | Диапазон значений | Размер |
---|---|---|
char | -128. +127 | 1 байт |
unsigned char | 0. 255 | 1 байт |
signed char | -128. 127 | 1 байт |
При работе с символьными данными нужно помнить, что если в выражении встречается одиночный символ, он должен быть заключен в одинарные кавычки. Последовательность символов, то есть строка, при использовании в выражениях заключается в двойные кавычки. Например: ‘F’ , ‘3’ , «Данные» , «235» .
Целочисленные типы данных
По сути, имеется один целочисленный тип для представления целых чисел — это тип данных int . Благодаря спецификаторам short , long , unsigned появляется некоторое разнообразие типов данных int , различающихся размером занимаемой памяти и (или) диапазоном принимаемых значений.
Спецификаторы целочисленных типов данных:
- short — укорачивает тип данных, к которому применяется, путём уменьшения размера занимаемой памяти;
- long — удлиняет тип данных, к которому применяется, путём увеличения размера занимаемой памяти;
- unsigned (без знака) — увеличивает диапазон положительных значений в два раза, при этом диапазон отрицательных значений в таком типе данных храниться не может. Позволяет представлять только положительные числа.
По умолчанию все целые типы считаются знаковыми, то есть спецификатор signed (знаковый ) можно не указывать.
Тип данных | Диапазон значений | Размер(байт) |
---|---|---|
int signed int signed long int |
-2147483648 . 2147483647 | 4 |
unsigned int unsigned long int |
0 . 4294967295 | 4 |
short int signed short int |
-32768 . 32767 | 2 |
unsigned short int | 0. 65535 | 2 |
long long int | -(2 63 -1). (2 63 -1)) | 8 |
unsigned long long int |
0. (2 64 -1) | 8 |
Вещественный тип (типы данных с плавающей точкой)
Вещественные типы данных предназначены для хранения чисел с плавающей точкой. В основном, числа с плавающей точкой нужны для решения задач с высокой точностью вычислений, например, операции с деньгами. Внутреннее представление вещественного числа в памяти компьютера отличается от представления целого числа.
Число с плавающей точкой представлено в экспоненциальной форме.
m — мантисса (целое или дробное число с десятичной точкой),
р— порядок (целое число).
Для того чтобы перевести число в экспоненциальной форме к обычному представлению с фиксированной точкой, необходимо мантиссу умножить на десять в степени порядок Например:
Тип данных | Диапазон значений | Размер (байт) |
---|---|---|
float | 3.4E-38 . 3.4E+38 | 4 |
double | 1.7E-308. 1.7E+308 | 8 |
long double | 3.4E-4932 . 3.4E+4932 | 10 |
Длина мантиссы определяет точность числа, а длина порядка его диапазон.
Данные типа float занимают 4 байт, из которых 1 двоичный разряд отводится под знак, 8 разрядов — под порядок и 23 — под мантиссу.
Данные типа double занимают 8 байт, в них под порядок — 11 разрядов и под мантиссу — 52 разряда соответственно.
Спецификатор типа long перед именем типа double указывает, что под величину отводится 10 байт.
Типы данных — Основы Java
Внутри высокоуровневых языков программирования данные разделяются по типам. Например, строки относятся к типу String, а числа — к типу int.
Зачем нужны типы? Для защиты программы от трудноотловимых ошибок. Типы определяют две вещи:
- Допустимые значения. Например, числа в Java делятся на две группы типов: целые int и рациональные float. Такое разделение связано с техническими особенностями работы аппаратуры.
- Набор допустимых операций. Например, операция умножения имеет смысл для типа «целые числа». Но не имеет смысла для типа «строки»: умножать слово «мама» на слово «блокнот» — бессмыслица.
Язык программирования распознает типы. Поэтому Java не позволит нам умножать строку на строку. Но позволит умножать целое число на другое целое число. Наличие типов и таких ограничений в языке защищает программы от случайных ошибок:
Каким образом Java понимает, что за тип данных перед ним? Любое значение где-то инициализируется. В зависимости от способа инициализации, становится понятно, что именно находится перед нами.
Например, число — это просто число, не обернутое в кавычки или другие парные символы. А вот строки всегда ограничены двойными кавычками. Например, значение "234" считается строкой, хотя внутри нее записаны цифры:
По-английски строки в программировании называются strings, а строчки текстовых файлов называются lines. Например, в коде выше одна строчка (lines) и ноль строк (strings). В русском языке иногда может быть путаница, поэтому во всех уроках мы будем использовать такие термины:
- Строка — для обозначения типа данных strings
- Строчка — для обозначения lines (строчек в текстовых файлах)
Типов данных в Java много, плюс можно создавать свои. Постепенно мы познакомимся со всеми необходимыми и научимся их правильно использовать.
Явная типизация
До сих пор при определении переменных мы использовали ключевое слово var , что может удивить тех, кто имеет какой-то опыт на Java. Обычно определение переменных показывают так:
Пришло время раскрыть карты! Java — это статически типизированный язык. В таких языках тип переменной фиксируется при ее объявлении. В большинстве языков для этого перед именем переменной указывается ее тип — в примере выше это число (int) и строка (String).
Раньше на Java создавали переменные только так, до тех пор пока не появился var . var – специальное ключевое слово, которое включает механизм вывода типов. Вывод типов автоматически определяет тип присваиваемого значения и связывает его с переменной. В примерах выше очевидно, где какой тип, тогда зачем его явно прописывать?
Вывод типов в Java появился в 2018 году, но в некоторых других языках он существует не один десяток лет. Первый язык с выводом типов называется ML и появился он аж в 1973 году. С тех пор вывод типов был добавлен в Ocaml, Haskell, C#, F#, Kotlin, Scala и множество других языков.
Вывод типов предпочтителен в большинстве ситуаций, однако бывает такое, что выводимый тип нас не устраивает. Тогда мы можем указать тип явно.
Какие бывают типы
В этом уроке мы рассмотрим систему типов в Java с высоты птичьего полета, не погружаясь в детали. Но сначала ответим на вопрос, зачем вообще про них знать?
В коде мы все время оперируем данными. Эти данные имеют разную природу, могут быть по-разному организованы, что влияет на удобство работы с ними. Типы преследуют нас на каждом шагу, поэтому без них программирование на Java возможно только на очень базовом уровне.
С другой стороны, не пытайтесь запомнить всю эту информацию про типы наизусть — она дается лишь для общего представления. Все важное о типах вы и так выучите в процессе программирования. Глобально, типы данных в Java делятся на две большие группы:
- Примитивные — предопределены в Java
- Ссылочные или не примитивные — создаются самим программистом, за исключением String и Array
У этих групп есть различия, которые мы разберем позже, когда познакомимся с null и объектно-ориентированным программированием. Пока достаточно знать, что имена примитивных типов начинаются с нижнего регистра ( int ), а ссылочных с верхнего ( String ).
Всего в Java восемь примитивных типов данных:
- byte
- short
- int
- long
- float
- double
- boolean
- char
Рассмотрим первые четыре типа. Это целые числа разного размера:
- byte — занимает в памяти 1 байт, значит может хранить числа от -128 до 127
- short — занимает в памяти 2 байта
- int — занимает в памяти 4 байта
- long — занимает в памяти 8 байт
Посмотрим на примере такого кода:
Определение переменной y завершилось с ошибкой, потому что мы указали тип byte, но присвоили переменной значение 270, которое выходит за множество допустимых значений.
Возникает закономерный вопрос. Зачем аж четыре типа для хранения чисел? Почему бы не сделать один, в который влезает почти любое большое число?
Технически так сделать можно, но мы находимся в мире инженерных решений. У любого решения всегда есть обратная сторона, поэтому невозможно сделать идеально — придется чем-то пожертвовать. В данном случае, объемом занимаемой памяти. Если оставить только long, то программа, активно оперирующая числами, начнет занимать слишком много места в оперативной памяти, что может быть критично.
Такая же логика использовалась для типов float и double. Они оба отвечают за рациональные числа. Разница лишь в том, что double — это двойной float, то есть в памяти он занимает в два раза больше места.
Создатели Java полагаются на разумность программистов, на их способность правильно подобрать нужные типы в зависимости от задачи. Для каких-то экстремальных приложений так и происходит, но в типичной разработке все просто. Программисты выбирают int для целых чисел и double для рациональных.
Рассмотрим оставшиеся типы данных.
Тип boolean отвечает за логические значения true и false . Им посвящен целый раздел, там мы про него и поговорим.
Особняком стоит тип char — символ. Это не строка, у него другой способ определения — через одиночные кавычки:
Строка, состоящая из одного символа — это не символ. Кажется, нелогично, но с точки зрения типов все так и должно быть, со временем вы это прочувствуете.
Извлечение символа из строки извлекает как раз символ, а не строку, состоящую из одного символа:
Хорошо, а где тип данных String — строка? Дело в том, что она не является примитивным типом. Внутри она представляет собой массив символов. Несмотря на это техническое различие, строки используются наравне с примитивными типами без особых отличий.
Значение по умолчанию
Примитивные данные всегда имеют значение, даже если они определяются без инициализации:
У каждого примитивного типа есть свое значение по умолчанию:
Значение null
Особняком в Java стоит значение null . В Java оно не является типом. Это просто конкретное значение со специальным смыслом и логикой работы. Начнем с примера:
Что находится внутри переменной a ? Если мы ее распечатаем, то увидим null . Значение null используется для ссылочных типов, когда значение не определено.
Как такое возможно? Представьте, что мы хотим извлечь из базы данных пользователя, а его там нет. Что вернет нам запрос в базу? Вот именно для таких ситуаций и нужен null .
Их гораздо больше, чем может показаться на первый взгляд. Чем дальше мы будем двигаться, тем чаще он начнет встречаться:
Из вышесказанного следует важный вывод. Любой ссылочный тип данных может принимать значение null . То есть, null является значением любого ссылочного типа. А вот примитивные типы и null не совместимы. Примитивное значение всегда должно быть определено:
Явное преобразование типов
В программировании регулярно встречаются задачи, когда один тип данных нужно преобразовать в другой. Простейший пример – работа с формами на сайтах.
Данные формы всегда приходят в текстовом виде, даже если значение число. Вот как его можно преобразовать:
Если нужно конвертировать из примитивного типа в примитивный, то все проще. Достаточно перед значением в скобках указать желаемый тип. В результате значение справа преобразуется в значение другого типа, указанного слева:
Типы данных в 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) |
Посмотрим на несколько примеров.
Производные типы данных
Типы данных, производные от основных типов данных, являются производными типами. Например: массивы, указатели, типы функций, структуры и т.д.