Какие основные типы данных используются при программировании на компьютере

Обновлено: 06.07.2024

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

Следует отметить, что концепция типов данных не реализована в таких языках, как Perl, Visual Basic Script ( VBScript ), не полностью реализована в Quick Basic , Visual Basic и т.п. Именно поэтому не рекомендуется использовать эти языки для начинающих изучать программирование .

Типы данных в таких языках, как C, C++, Java можно принудительно приводить к определенному типу. В этих языках автор советует так и поступать - если потребуется, применять принудительное приведение типов , а не ограничиваться приведением по-умолчанию. В противном случае могут возникнуть ошибки, например: "Не могу привести тип ' unsigned char *' в 'const char *'".

5.1. Примитивные (машинные) типы данных

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

Как известно из школьных учебников по информатике [36, 54, 53, 35], любое число, любые символы, любые объекты в памяти ЭВМ представляются в виде последовательности нулей и единиц - битов. Бит (от английского Binary digIT ) является единицей информации, принимающей одно из двух значений: "0" и "1". Поскольку бит - очень малая величина, информацию обычно выражают в байтах или кратных ему числе битов. Один байт соответствует восьми битам. Иначе говоря, в одном байте можно закодировать 256 (2^8) символов, представить целые числа без знака от 0 до 255, или представить целые числа со знаком от -128 до +127. Заметим, что все символы в компьютере представлены в виде целых чисел без знака.

Отступление. В середине 70-х годов XX века ученые подсчитали, что человеческий мозг вмещает в себя

10^18 бит информации. Это число соответствовало в то время всей информации, содержащейся в библиотеке им. В.И. Ленина. В переводе на современный компьютерный язык это соответствует приблизительно одному экзабайту - миллиону гигабайт информации, что приближенно равно объему одной крупной распределенной базы данных бронирования авиабилетов и авиаперевозок (по оценкам автора). Почему же возможности мозга человека превышают возможности "компьютерного" интеллекта? Дело в том, что человеческий мозг может удерживать в своей памяти, по аналогии с кошельком, как "медные монеты" - необработанные записи, последовательности букв и цифр, так и "золотые монеты" - сложные, обработанные данные, в виде готовых концепций, теорем и т.д. Это делает мозг более "гибкой" системой, чем компьютер (позволяя, путем "сжатия с потерями" уменьшать объем информации в 100 и более раз).

Итак, все данные в ЭВМ представляются в виде одного или нескольких битов. Тогда напрашивается вопрос: "А откуда в языках программирования такое большое число машинных типов данных, если все кодируется битами?" Автор отвечает: количество машинных типов данных определяется количеством регистров и их типом в центральном процессоре ЭВМ. Регистр можно представить как "сверхоперативную", быструю, встроенную в центральный процессор память . Эти регистры имеют длину 1 байт , 2 байта ("полуслово", " слово "), 4 байта (" слово ", "двойное слово ") и 8 байт ("двойное слово "). Изредка используются и более длинные регистры (например, для хранения [чисел с плавающей точкой] повышенной разрядности).

Помимо своего размера (так называемой разрядности) регистров различают также назначение регистра и формат хранимых в нем данных. Подробнее о машинных типах данных смотри этот раздел ниже.

5.2. Целые числа и целочисленная арифметика

5.2.1. Целый тип

Наиболее простыми в реализации и "очевидными" с точки зрения " здравого смысла " являются целочисленные типы данных. Они представляют собой запись чисел в "двоичном" формате, в виде последовательности нулей и единиц. Различают два вида целых чисел: "целые без знака" и "целые со знаком".

Тип данных "целые без знака" представляют собой натуральный ряд чисел, которые начинаются с "0" (а не с "1", как в математике!) и продолжаются вплоть до исчерпания разрядности регистра.

Тип данных "целые со знаком" содержат в старшем бите (по-другому - в самом "левом", первом по порядку бите) признак знака. Если этот бит имеет значение: "0", то число считается положительным, если "1" - отрицательным числом.

Примечание: отрицательные числа представляют в ЭВМ в виде дополнительного кода . Подробнее о дополнительном коде смотри, например, [62], а также школьные учебники по информатике [35, 36, 53, 54].

В таблице 5.1 представлены максимальное (max) и минимальное (min) значения, применяемые числами в целочисленных регистрах различной разрядности для типов "целые со знаком" и "целые без знака". Между этими максимальными и минимальными значениями могут принимать целочисленные значения константы и переменные указанных типов.

В таблице 5.2 дается соответствие между разрядностями целочисленных регистров и связанными с ними обозначениями типов на языках Quick Basic, C/C++, Java. В этой же таблице приведены "псевдонимы" "машинных" типов данных, применяемых в библиотеке Windows API. Подробнее о Windows API смотри в книгах 86.

5.2.2. Целочисленная арифметика

С целочисленными типами данных возможны следующие операции:

  • сложение;
  • вычитание;
  • умножение;
  • целочисленное деление;
  • нахождение остатка от деления;
  • смена знака числа;
  • инкремент числа;
  • декремент числа;
  • а также все операции отношения .

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

5.2.3. Особые ситуации при работе с целыми числами

Целочисленная арифметика генерирует следующие ошибки [39,40], вызывает так называемые программные прерывания :

  • деление на ноль ( divide by zero);
  • переполнение ( overflow ) - попытка записать в регистр целое число с разрядностью, превышающей разрядность регистра, например: short i = 2000000 или unsigned short u=-1;
  • исчезновение знака - прерывание, указывающее, что в старший бит регистра (то есть в признак знака) был перенос единицы из следующего за ним разряда (бита). Соответствует прерыванию "переполнение", но для целых чисел со знаком.

5.2.4. Замечания о целочисленном делении

Замечание по целочисленному делению. Целочисленное деление отличается от "обычного математического" деления в том, что при целочисленном делении происходит "отбрасывание" дробной части результата, например:

  • 2/3 = 0;
  • 3/3 = 1;
  • 4/3 = 1;
  • 5/3 = 1;
  • 6/3 = 2;
  • и т.д.

На практике это приводит к большим ошибкам округления при расчетах. Но иногда следует использовать только целочисленную арифметику. Например, при выдаче информации на экран дисплея в "графическом" виде по-умолчанию используется (во всяком случае, в библиотеке Windows API) только целочисленные значения. Для этих целей использование целочисленной арифметики - "естественно".

  • use integer - для включения целочисленной арифметики;
  • no integer - для выключения целочисленной арифметики.

5.3. Булевы типы. Булева алгебра

5.3.1. Булева алгебра: введение

Булева алгебра - это раздел математики, изучающий операции с логическими данными, то есть данными, принимающие значения: "Истина" и "Ложь" (по-английски: "true" и "false"). Эта дисциплина была разработана английским математиком XIX века Джорджем Булем, имя которого она носит.

К булевым операциям (которые в русскоязычной литературе чаще называют логическими операциями) относятся:

  • конъюнкция (логическое "И");
  • дизъюнкция (логическое "ИЛИ");
  • отрицание (логическое "НЕ");
  • логическое " исключающее ИЛИ ";
  • логическая "эквивалентность";
  • логическое "следствие".

Из этих логических операций первые три операции присутствуют практически во всех языках программирования, а последние две - только в языках логического программирования (и то не во всех). При этом операция логического "НЕ" - унарная операция , применимая к следующей за ней переменной, а остальные операции - бинарные (применимые к паре значений: предыдущему и последующему). Результаты логических операций представлены [в таблице 5.4]. В ней же представлены обозначения этих операций в математике, языках Quick Basic, C/C++, Java.

5.3.2. Булевы типы

Как уже сказано выше, логические выражения могут принимать только два значения: "false" (ложь) и "true" (истина). Эти значения-константы определены следующим образом:

Логично использовать для этих констант целое число разрядностью 1 бит, но. Поскольку минимальным размером регистра, отводимого под целое число, является 1 байт, то именно ячейка памяти этого размера служит для хранения числа с типом данных: "Boolean". На самом деле размер этого типа данных может составлять 2 или даже 4 байта. Это связано со следующими обстоятельствами.

В основном стандарте для языка Си: ANSI C, - отсутствует булевский тип данных. Вместо него используется целый тип данных: integer (int). Этот тип данных реализован в различных компиляторах по-разному, и занимает от 2-х до 4-х байтов. Константе "ложь" ("FALSE") соответствует значение; "0", а любое ненулевое значение воспринимается как "истина". Это позволяет написать на языке Си компактный код, например:

Описывает цикл "Пока", завершающийся при достижении конца файла, связанного с потоком stream. Информацию по потокам и окончанию файлов смотрите в следующих лекциях.

Не смотря на несоответствие стандарту ANSI C, в стандартной библиотеке Windows API для языков Си/Си плюс-плюс введен тип BOOL, являющегося реализацией булевского типа данных. Тип данных: "Boolean" также введен в стандартах на C++ и Java.

Булевский тип данных отсутствует в Quick Basic и более старых реализациях языка Basic, но присутствует в языке Visual Basic и его "клонах".

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

В Си/Си++ имеется четыре базовых арифметических (число­вых) типа данных. Из них два целочисленных — char, int — и два плавающих (вещественных) — float и double. Кроме того, в программах можно использовать некоторые модификации этих ти­пов, описываемых с помощью служебных слов — модификаторов. Существуют два модификатора размера — short (короткий) и long (длинный) — и два модификатора знаков — signed (знако­вый) и unsigned (беззнаковый). Знаковые модификаторы при­меняются только к целым типам.

Как известно, тип величины связан с ее формой внутреннего представления, множеством принимаемых значений и множеством операций, применимых к этой величине. В табл. 1 перечислены арифметические типы данных Си++, указан объем занимаемой памяти и диапазон допустимых значений.

Размер типа int и unsigned int зависит от размера слова операционной системы, в которой работает компилятор Си++. В 16-разрядных ОС (MS DOS) этим типам соответствуют 2 байта, в 32-разрядных (Windows) — 4 байта.


Эквивалентные названия типа

зависит от системы

signed, signed int

зависит от системы

short, signed short int

unsigned short int

long, signed long int

unsigned long int

Анализируя данные табл. 1, можно сделать следующие выводы:

o если не указан базовый тип, то по умолчанию подразумевается int;

o если не указан модификатор знаков, то по умолчанию подра­зумевается signed;

o с базовым типом float модификаторы не употребляются;

o модификатор short применим только к базовому типу int.

Программисту, работавшему на Паскале, покажется странным, что тип char причислен к арифметическим типам. Ведь даже его имя указывает на то, что это символьный тип! В Си/Си++ вели­чины типа char могут рассматриваться в программе и как симво­лы, и как целые числа. Все зависит от контекста, т. е. от способа использования этой величины. В случае интерпретации величины типа char как символа ее числовое значение является ASCII-кодом. Следующий пример иллюстрирует сказанное.

printf("%c",а); /*На экране появится символ А*/

printf("%d",a); /*На экране появится число 65*/

Символы "%с" являются спецификацией формата ввода/выво­да символьных данных, a "%d" — спецификацией для целых чисел.

Еще одной особенностью Си является отсутствие среди базовых типов логического типа данных. Между тем, как мы дальше увидим, в Си использу­ются логические операции и логические выражения. В качестве логических величин в Си/Си++ выступают целые числа. Интер­претация их значений в логические величины происходит по пра­вилу: равно нулю — ложь, не равно нулю — истина.

В последние версии Си++ добавлен отдельный логический тип с именем bool. Его относят к разновидности целых типов данных.

Описание переменных в программах на Си/Си++ имеет вид:

unsigned char code;

unsigned long long number;

long double max__num;

Одновременно с описанием можно задать начальные значения переменных. Такое действие называется инициализацией перемен­ных. Описание с инициализацией производится по следующей схеме:

тип имя_переменной = начальное_значение

unsigned int year=2 000;

Запись целых констант. Целые десятичные числа , начинающиеся не с нуля, например: 4, 356, —128.

Целые восьмеричные числа , запись которых начинается с нуля, например: 016, 077.

Целые шестнадцатеричные числа , запись которых начинается с символов 0х, например: 0xlA, 0x253, 0xFFFF.

Тип константы компилятор определяет по следующим пра­вилам: если значение константы лежит в диапазоне типа int, то она получает тип int; в противном случае проверяется, ле­жит ли константа в диапазоне типа unsigned int, в случае положительного ответа она получает этот тип; если не подхо­дит и он, то пробуется тип long и, наконец, unsigned long. Если значение числа не укладывается в диапазон типа unsigned long, то возникает ошибка компиляции.

Запись вещественных констант . Если в записи числовой кон­станты присутствует десятичная точка (2.5) или экспоненциаль­ное расширение (1E-8), то компилятор рассматривает ее как ве­щественное число и ставит ей в соответствие тип double. Приме­ры вещественных констант: 44., 3.14159, 44Е0, 1.5Е-4.

Использование суффиксов . Программист может явно задать тип константы, используя для этого суффиксы. Существуют три вида суффиксов: F (f) - float; U(u) — unsigned; L( l ) — long (для целых и вещественных констант). Кроме того, допускается совмес­тное использование суффиксов и и L в вариантах U L или LU.

3.14159F — константа типа float, под которую выделяется 4 байта памяти;

3.14L — константа типа long double, занимает 10 байт;

50000U — константа типа unsigned int, занимает 2 байта памяти (вместо четырех без суффикса);

0LU — константа типа unsigned long, занимает 4 байта;

24242424UL — константа типа unsigned long, занимает 4 байта.

Запись символьных и строковых констант. Символьные констан­ты заключаются в апострофы. Например: ‘ А ’ , ‘ а ’ , ‘ 5 ’ , ‘ + ’ . Стро­ковые константы, представляющие собой символьные последова­тельности, заключаются в двойные кавычки. Например: "rezult", "введите исходные данные".

Особую разновидность символьных констант представляют так называемые управляющие символы. Их назначение — управление выводом на экран. Как известно, такие символы расположены в начальной части кодовой таблицы ASCII (коды от 0 до 31) и не имеют графического представления. В программе на Си они изоб­ражаются парой символов, первый из которых ' \ '. Вот некото­рые из управляющих символов:

' \ n ' — переход на новую строку;

‘ \t' — горизонтальная табуляция;

'\а' - подача звукового сигнала. Полный список управляю­щих символьных последовательностей будет дан позднее.

Управляющие символьные последовательности являются частным случаем эскейп-последовательностей (ESC-sequence), с помощью которых можно задать символьную константу указанием ее кода. Код символа можно указать в восьмеричном или в шестнадцатеричном представлении. Формат восьмеричного представления: '\ddd'. Здесь d — восьмеричная цифра (от 0 до 7). Формат шестнадцатеричного представления:' \xhh' (или ' \xhh'), где h — шестнадцатеричная цифра (от 0 до F). Например, константа, соответствующая заглав­ной латинской букве А, может быть представлена тремя способа­ми: 'А', '\101', ‘\х41’.

Именованные константы (константные переменные) . В программе на Си/Си++ могут использоваться имено­ванные константы. Употребляемое для их определения служебное слово const принято называть квалификатором доступа. Квалификатор const указывает на то, что данная величина не может изменяться в течение всего времени работы программы. В частно­сти, она не может располагаться в левой части оператора присва­ивания. Примеры описания константных переменных:

const float pi=3.14159;

const int iMIN=l, iMAX=1000;

Тип констант явно не указывается и определяется по форме записи. В конце директивы не ставится точка с запятой.

На стадии препроцессорной обработки указанные имена заме­няются на соответствующие значения. Например, если в програм­ме присутствует оператор

то в результате препроцессорной обработки он примет вид:

При этом идентификаторы iMAX и iMIN не требуют описания внутри программы.

Константы перечисляемого типа . Данное средство языка по­зволяет определять последовательность целочисленных именован­ных констант. Описание перечисляемого типа начинается со слу­жебного слова enum, а последующий список констант заключает­ся в фигурные скобки. Например:

В результате имени А будет сопоставлена константа 0, имени B — константа 1, C — 2, D — 3. По умолчанию значение первой константы равно нулю.

Для любой константы можно явно указать значение. Например:

В результате будут установлены следующие соответствия: А=10, B=11, C=12, D=13.

Возможен и такой вариант определения перечисления:

Если перечисляемому типу дать имя, то его можно использо­вать в описании переменных. На­пример:

metal Met 1 ,Met2;

Здесь идентификатор metal становится именем типа. После та­кого описания в программе возможны следующие операторы:

Welcome! Никак руки не доходили сделать эту статью, но теперь я её пишу.

Типы данных - одна из важнейших частей языка. Переменные, функции, поля класса и даже другие типы данных - ничто без данных. Без данных: перменная уже не хранит значение, а функция его не возвращает. Но что такое данные? Почему всё держится именно на них? Зачем данные разделяют на типы? И почему int ≠ 4 байта?
Хочешь узнать ответы? Бегом под кат!

Что такое данные?

- Что такое данные?

Казалось бы. Это все лишь вопрос. Как он связан с данными? Но всё не так просто.
Когда человек задаёт вопрос: он передаёт информацию, а другой человек получает информацию. Когда прозвучит ответ: человек задавший вопрос получит информацию, а человек ответивший на него передаст информацию.

Это называется обмен данными. Но что сдесь данные? Давайте заглянем в терминологию:

Зачем нужны данные? (Где используются данные?)

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

На самом деле, данные используются везде. И сейчас, то, что ты читаешь - это данные. А на вид и не скажешь. Вы думали что данные - это единицы, да нолики? А вот и нет. Это ещё и двойки. 2 <- вот, видите? Двойка. Ладно, ладно, давайте без шуток. Данные вездесущи, а программирование - это работа с данными.

Почему всё держится именно на данных

Из прошлого предложения можно понять: "Все - есть данные". Соответсвенно на них же всё и держится. Когда мы создаём переменную: мы передаём в неё данные.

- Но что если мы передадим в переменную. Другую переменную?

- Ага, то есть, перменная это тоже данные?

Да, всё именно так.
- А что будет, если мы создадим пустую переменную? Мы же не передаём в неё данные?

Хорошо, давай попробуем.

Чему тогда равна переменная? Нулю? Пустоте(void)? А вот и нет.

Выходит в переменной есть данные. Но какие? Это мы должны спросить у конкретных типов данных. Например в int по стандарту(в C++) помещается значение одного из адрессов оперативной памяти.

- Но какого адресса? Он же не случайный?

Нет, конечно. Когда мы создаём переменную: под неё выделяется память, и значение которое было по адрессу нашей новой переменной, присваевается переменной.

- Хмм, хорошо. А что ты скажешь по поводу void? Это же пустота. В void 0 байт. Void ничему не равен.

Хах, давай проверим.

- Стоп, что? Но void же ничему не равен! Как он занимает 1 байт?

На самом деле тут нет ничего странного. Любая переменная в C++ хранится в ОЗУ. И void тоже. Соответственно, void должна что-то хранить. Но что она хранит - мы не можем узнать. Так как void хранит значение, мы можем получить адресс void переменной.

Зачем данные делят на типы?

Для начала, давайте разберёмся, что такое тип данных?

Тип данных — допустимое множество значений.

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

Для пользовательских типов данный (ака классы) лучше использовать этот вариант.

Тип данных — класс данных, характеризуемый членами класса и операциями, которые могут быть к ним применены.

- Хорошо. Мы знаем что такое тип данных. А зачем эти типы нужны?

Ответ на данный вопрос есть. Принадлежит он, конечно, не мне.

Наверное, вам известно, что в памяти компьютера все числа хранятся в виде последовательности 0 и 1. Так вот, для того чтобы записать любое число только ноликами и единичками существуют определённые правила. Эти правила довольно сильно отличаются для целых чисел и для вещественных чисел. В памяти компьютера числа "3" и "3.0" будут записаны совершенно по-разному.

int ≠ 4 байта. Почему?

Ответ на этот вопрос предельно прост. Размер и числовой диапазон типов данных задаётся процессором. Соответсвенно размер int зависит от процессора в комьютере. Для 16 битный процессоров - это 2 байта (short int), для 32 и 64 битных - 4 байта (long int). Правда это не всегда так. "Но почему?", - спросите вы меня. А ответа я не дам. Попробуйте найти ответ сами ;)


Пока вы учитесь программированию, придётся написать тысячи строк кода. После учёбы – ещё больше. А по сути всё это набор данных, различающихся по типам и структурам. Что такое структуры данных мы обсудим в следующих уроках, а о типах поговорим сейчас.

Данные – это информация, записанная в той форме, которая удобна компьютеру для обработки и передачи. Данные в языках программирования бывают разных типов. В JavaScript это:

— number – число;

— string – строка;

— boolean – логический тип данных;

— undefined – тип данных, у которых значение не определено;

— null – тип данных с «пустыми» значениями;

— object – тип данных, хранящий свойства и методы.

Во всех языках программирования свои типы данных и способы их обозначений. На курсе «Основы программирования» мы подробно рассмотрим три базовых типа данных в JavaScript:

— числа;

— строки;

— логические или булевы значения.

Готовы? Начнём по порядку.

Числа

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

В JavaScript тип данных «число» имеет обозначение number.

Теперь посмотрим, как это работает:


2. Во вкладке JS вводим команды:

Справка! В конце каждой строки с командой в JS необходимо ставить точку с запятой. Воспринимайте это как знак препинания в обычном языке, на котором вы говорите. Поставив ; вы сообщите компьютеру, что вы закончили одну «фразу» и начинаете следующую.

Оператор typeof() говорит компьютеру о том, что необходимо вывести в консоль тип введённых данных, а не сами данные.

Результат сразу отображается во вкладке Console:

Видим, что тип не отличается у обоих значений и указывается как number.

Строки

Строки – это второй базовый тип данных. В JavaScript они обозначаются как string.

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

Справка! Числа определяются как тип данных string, если они заключены в кавычки. Тогда они признаются не числом (number), а одним из символов строки (string). Проверим:

Результат в консоли:

В программах строки указывают либо в одинарных кавычках-апострофах, либо в двойных кавычках – зависит от языка. В JS разрешено использовать и двойные, и одинарные кавычки по выбору.

При использовании одинарных кавычек, сложность возникает тогда, когда внутри строки стоит такой же символ. Например, 'It's cloudy day'. Английское местоимение It's включает в себя апостроф. Если мы проставим три апострофа (в начале, в слове It's и в конце строки), то компьютер обозначит конец строки после It:

В консоль выведется:

Как этого избежать?

В таких случаях мы используем экранирование – ставим перед символом внутри строки обратный слэш «\». Тогда фраза 'it's cloudy day' примет вид 'it\'s cloudy day' и будет правильно считана:

В JavaScript мы можем писать подобные строки в двойных кавычках и результат сразу будет тот, что нужен:

Каждый символ в строке имеет порядковый номер – индекс. Его используют для того, чтобы указать компьютеру, к какому конкретно символу идёт обращение.

Справка! Отсчёт начинается с 0.

Например, в слове «синий» индексы присваиваются так:

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

Практика

1. Вводим в «песочнице» строку 'hello' с помощью команды console.log() через typeof(). В консоли увидим тип string. А если введём числовое значение без кавычек 24.3, увидим тип number:

2. Попробуем ввести строку без typeof() и посмотрим на результат:

3. Выделим из строки отдельный символ. Например, букву B в слове LOFTBLOG. Эта буква стоит в строке на 5 месте, поэтому имеет индекс 4 (помним, что нумерация с 0). Чтобы обратиться к символу, мы указываем его индекс в квадратных скобках – [4]:

Выделение фрагмента строки

Для выделения фрагмента строки (подстроки) в JS используется три метода:

substring() – срез строки, где необходимо указать только первый или первый и последний символ через запятую.

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

Справка! Последним считается не индекс последнего символа, который мы хотим выделить, а следующий за ним. Например, в слове LOFTBLOG, буква G имеет индекс 7, но последним считается индекс 8, так как правая граница в срез не входит.

В примере первым символом мы указали четвёртый – B, а последним тот, что находится под индексом 6. Это буква O. Но в консоли мы увидели только две буквы – BL. Это подтверждает то, что правая граница не входит в срез. Если мы захотим вырезать слово BLOG, но укажем последним символ под номером 7, а не 8, то получим:

slice() – действует так же, как и substring(), но ему допускается присваивать отрицательные значения, начиная с -1. Отсчёт начнётся с конца строки, а не с начала:

Результат в консоли:

substr() – используется для выделения фрагмента с указанием индекса начального символа и количества символов после него, включая первый:

В качестве начального символа мы определили тот, что под индексом 1 – это первая O в слове LOFTBLOG. А через запятую попросили вывести 4 символа, включая его – это OFTB.

Логические (булевы) значения

Здесь за основу берутся логические выражения, на которые компьютер мог бы ответить «да, это верно» или «нет, это не верно». Буль принимает только два значения:

истина – true

ложь – false

Они используются, когда программа принимает решение о том, что делать дальше, анализируя логическое значение выражений. Например, при выполнении алгоритма «ветвление»: если выражение верно, то программа идёт по одному алгоритму, если не верно, то по другому.

Не читали наш первый урок про логику и алгоритмы? Он здесь.

В JavaScript булевы значения имеют тип boolean, писать их нужно с маленькой буквы:

Консоль покажет тип:

Напишем логическое выражение и посмотрим, что выводится в консоль в качестве значений. Например, «три равно три».

Справка! Для проверки равенства в JavaScript необходимо прописывать 2 знака равно, так как одинарное равно уже используется для присваивания значений.

Как видим, значением логического выражения «3==3» является true, так как три действительно равно трём.

Если ввести ложное условие, то значение станет false:

Преобразование типов данных

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

Одна из особенностей языка JavaScript в том, что здесь выполняется неявное преобразование типов – язык сам понимает, в какой тип преобразовать данные, в зависимости от операции, которую мы выполняем.

Но в JS есть команды, которые позволяют сделать это самостоятельно – провести явное преобразование.

Для этого используются команды:

— String()

— Number()

— Boolean()

Число 2323, написанное без кавычек, имеет тип number. С помощью команды String() мы перевели его в тип string – строка. Это видно по отображению результата. Тип «число» указывается в консоли без кавычек. А тип «строка» в кавычках.

При преобразовании числа и строки в булевый тип, любое значение определяется, как true, кроме числового значения 0.

Если 0, написано как '0', то это тип данных string и он определится, как true, а если мы напишем 0 без кавычек, то это тип данных number и при переводе в буль он равен значению false. Проверим:

Любые другие числа кроме 0 определятся как true.

Булевы значения можно преобразовать в числовой тип. Значению true соответствует 1, а false – 0:

При преобразовании булевых значений в тип «строка» мы увидим слова «true» и «false» в кавычках, что означает, что тип изменился, так как значения boolean пишутся без кавычек:

Виды типизации

Типизация, в зависимости от языка программирования, может быть одновременно:

— сильной или слабой;

— динамической или статической.


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

Слабая типизация означает, что язык программирования выполняет автоматическое (неявное) преобразование типов, в зависимости от операции, которая над данными производится. Например, так происходит в JavaScript.

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

В языках с динамической типизацией тип данных не фиксируется и может быть разным у одних и тех же данных в разных частях кода.

А в статической типизации тип фиксируется при первом объявлении значений. Изменить это у нас не получится. Ошибка в типе обнаружится еще до запуска программы.

Домашнее задание

Напишите типы данных двух разных языков программирования. Укажите, с какой они типизацией. Например, JavaScript – язык со слабой и динамической типизацией.

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

Новичкам, ищущим своё профессиональное место в области кодов и алгоритмов, обязательно необходимо знать про такой основополагающий момент, как данные. По сути, это информация, которая зафиксирована таким образом, что компьютер может с ней работать – получать, обрабатывать и передавать.

Виды данных в программировании бывают разные, и не зная их сложно добиться высот в IT-сфере. Заполнить пробел в этой теме вам поможет представленная ниже статья. В ней мы рассказали про понятие и основные разновидности данных, а также дополнили материал примерами.

Основные виды данных в программировании

Виды данных в программировании – основополагающее понятие. Классификация данных позволяет определить, где они хранятся, что собой представляют и для каких операций могут применяться.

Основные виды данных в программировании

Основные виды данных в программировании

Виды данных в программировании – это варианты представления переменных конкретного объекта. Чтобы генерировать нужный код программирования, информация о типах данных должна быть доступна программисту и транслятору.

Виды данных = формат + размерные характеристики, диапазон показателей + операции.

Различают базовые и производные виды данных в программировании:

    Первый вид (БВД) включает данные, которые изначально заложены в транслятор. Как правило, они зависят от сферы применения языка программирования. В языке Си, который отличается зависимостью от архитектуры, базовые виды данных не отличаются от основных форматов, принятых в IT. Другими словами, при преобразовании операций с данными в различные машинные команды они (данные) совершенно не меняются.

Ваш Путь в IT начинается здесь

Подробнее

Второй вид – производные (ПВД), программист преобразует из базовых. Это приводит к формированию иерархии видов данных. При этом для обозначения некоторых из них могут применяться дополнительные имена, которые также можно применять наряду с базовыми. Например, в языке Си++, который является объектно-ориентированным, это имена классов.

Разновидности базовых типов данных в программировании

  • Числовые виды данных в программировании

Целочисленные.

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

У беззнаковых данных диапазон больше в 2 раза, чем у знаковых. Это – из-за компьютерного восприятия: в знаковых типах бит отражает знак числа, где 0 является положительным значением, а 1 – отрицательным.

Разновидности базовых типов данных в программировании

Разновидности базовых типов данных в программировании

Учитывая восприятие компьютерными устройствами целого значения, в ячейке памяти из n бит может храниться и 2 n-1 для знаковых типов, и 2 n – для беззнаковых:

  • Тип short (короткий целый.) Для него в памяти отведено 16 бит, то есть 2 байта (216 = 65 536). Диапазон значений, который может принять тип short со знаком – это [-32 768; 32 767].
  • Переменный тип long (длинный целый). Этому типу выделено 64 бита, то есть 8 байт. (264 = 1,8 446 744 * 1 019). Он имеет внушительный диапазон: в случае знакового типа это [-9 223 372 036 854 775 808 9 223 372 036 854 775 807]. Также модификатор long может использоваться в связке с другими типами (long будет указан перед наименованием типа, допустим, long double). Благодаря этому увеличивается диапазон возможных значений.

Вещественные.

Значения этого типа имеют плавающую запятую.

Плавающая запятая — форма представления действительных чисел, в которой число хранится в форме мантиссы и показателя степени. Если говорить на языке программирования, то каждое число может быть представлено в следующей форме:

где N — записываемое число;

p (целое) — порядок.

Как увеличить свой доход минимум на 50% выбрав правильную профессию Запутались в разнообразии профессий и не знаете, куда двигаться? Хотите больше зарабатывать или работать удалённо? Уже повзрослели, но так и не поняли, кем хотите стать? Мечтаете наконец найти любимую работу и уйти с нелюбимой?

Александр Сагун

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

Карьерная мастерская это:

  • Список из 30 востребованных современных профессий.
  • Долгосрочный план по развитию в той профессии, которая вам подходит.
  • Список каналов для поиска работы.
  • 3 теста на определение своих способностей и склонностей.
  • Практику в разных профессиях на реальных задачах.

Уже 50 000 человек прошли мастерскую и сделали шаг к новой профессии!

Запишитесь на бесплатный курс и станьте ближе к новой карьере:

Зарегистрироваться и получить подарки

Например: 14 441 544 = 1,4 441 544 ∗ 10 7 ; 0,0 004 785 = 4,785 ∗ 10 -4 . На мониторе компьютера вы увидите следующие значения:

Таким образом, в предназначенном месте памяти хранится целое число фиксированной длины и последовательность вносимого значения. Разберем пример типа данных, хранящихся в 64 битах. Мантисса будет равна 53 битам: 1 для знака числа и 52 для её значения; порядок 10 битов: 1 бит для знака и 10 для значения. Здесь можно порассуждать о диапазоне точности, а именно какое самое большое и самое маленькое число может хранить рассматриваемый тип данных: от 4,94 * 10 −324 до 1,79 * 10 308 .

Но мы помним, что компьютерная память не резиновая, поэтому сохраняются первые разряды мантиссы. По-другому их ещё именуют значащими.

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

  • Символьный тип данных в программировании.

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

  • Перечислимый вид данных в программировании.

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

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

Теперь рассмотрим сложные виды данных в программировании. И на первом месте – массив. Массив – это последовательно выстроенная и имеющая общее имя структура данных, в которой хранятся элементы одного типа. Его можно представить как набор пронумерованных ячеек, в каждую из которых поместили какие-то данные (один элемент данных в конкретную ячейку).

Каждый массив определяется типом данных составляющих его элементов, а они могут быть абсолютно любыми. В программировании не допускается использование всего массива, работа осуществляется с определенной его частью. Для того, чтобы добраться до него, в трёх указанных выше языках применяют оператор «[]»:

Индексом массива является целое число, ссылающее на определенную часть массива. Индекс, как правило, имеет вид int.

До этого мы разобрали встроенные виды данных в программировании. Далее рассмотрим пользовательский тип данных.

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

Другим пользовательским видом данных в программировании является класс. Класс наделен теми же возможностями, что и структура, но, помимо параметров, он ещё имеет и методы. Также класс поддерживает большое число вещей, которые объединены объектно-ориентированным программированием.

Читайте также: