Опубликован: 25.08.2010 | Доступ: свободный | Студентов: 6065 / 587 | Оценка: 3.91 / 3.44 | Длительность: 11:09:00
Лекция 1:

Основные понятия языка

Лекция 1: 123 || Лекция 2 >

Типы данных С++

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

Тип данных однозначно определяет:

  • множество их возможных значений (связанное с внутренним представлением данных в памяти компьютера);
  • допустимые действия над данными (операции и функции).

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

Объем памяти, выделяемый для величин, тоже зависит от типа. По стандарту единицей памяти в С++ является байт.

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

Рисунок 1.1 помогает окинуть взглядом все разнообразие типов данных, определенных в стандарте языка С++.

Типы данных стандартного С++

Рис. 1.1. Типы данных стандартного С++

Базовые типы данных

Элементарные типы данных, если исключить из них тип void, часто называют арифметическими,поскольку их можно использовать в арифметических операциях. Для их описания определены следующие ключевые слова:

  • bool (логический);
  • char (символьный);
  • wchar_t (широкий символьный);
  • int (целый);
  • float (вещественный);
  • double (вещественный с двойной точностью).

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

Существует четыре ключевых слова, уточняющих внутреннее представление и диапазон значений стандартных типов:

  • short (короткий);
  • long (длинный);
  • signed (знаковый);
  • unsigned (беззнаковый).

Сочетания перечисленных ключевых слов формируют 14 различных арифметических типов, приведенных на рис. 1.1. Например, char, signed char и unsigned char - это три равноправных различных типа.

ПРИМЕЧАНИЕ

Во многих других языках символьные типы более четко отделены от арифметических. В С++ символы фактически являются подмножеством целых величин и могут участвовать в арифметических операциях. По этой причине типы signed char и unsigned char встречаются на рисунке дважды: как символьные и как целые типы. Это соответствует описанному в стандарте.

Логический тип

Величины логического типа могут принимать только значения true и false, являющиеся ключевыми словами. Величины логического типа могут участвовать в арифметических операциях. При преобразовании к целому типу true имеет значение 1, false - нуль. Размер логического типа в стандарте не определен и зависит от реализации.

Символьные типы

В стандарте языка определено три различных символьных типа: char, signed char и unsigned char. Внутренним представлением символа является его код - целое число. Под величину любого символьного типа отводится одна единица памяти - байт:

sizeof(char) = sizeof(signed char) = sizeof(unsigned char) = 1

Размер байта зависит от реализации, однако этот размер должен быть достаточен, чтобы вместить код любого символа из набора символов реализации для данного компьютера. Наличие знака у типа char тоже зависит от реализации: он может совпадать либо с signed char, либо с unsigned char.

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

Целые типы

В языке С++ определено 8 типов для хранения целочисленных величин: четыре знаковых ( signed char, short int, int, long int ) и четыре беззнаковых ( unsigned char, unsigned short int, unsigned int, unsigned long int ). По умолчанию все целочисленные типы считаются знаковыми, поэтому спецификатор signed можно не указывать. Ключевое слово unsigned позволяет представлять неотрицательные целые числа.

ПРИМЕЧАНИЕ

Типы short int, long int, signed int и unsigned int можно сокращать до short, long, signed и unsigned соответственно.

Целым константам, встречающимся в программе, по умолчанию приписывается тип signed int. Если он по каким-либо причинам не устраивает программиста, можно явно указать требуемый тип с помощью суффиксов L, l ( long ) и U, u ( unsigned ). Например, константа 32L будет иметь тип long и занимать 4 байта. Можно использовать суффиксы L и U одновременно, например, 0x22UL или 05Lu.

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

sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long).

При этом сказано, что тип int должен иметь естественный размер, обеспечиваемый архитектурой компьютера. Диапазоны значений величин целых типов для IBM PC -совместимых компьютеров приведены в таблице 1.2.

Visual С++.NET 2005 предоставляет несколько нестандартных целых типов. Например, тип long long определяет целые числа в диапазоне от -9 223 372 036 854 775 808 до +9 223 372 036 854 775 807 и занимает в памяти 8 байт.

Типы с плавающей точкой

Стандарт С++ определяет три типа данных для хранения вещественных значений: float, double и long double. Все они имеют знак.

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

Константы с плавающей точкой имеют по умолчанию тип double. Можно явно указать тип константы с помощью суффиксов F, f ( float ) и L, l ( long ). Например, константа 2E+6L имеет тип long double.

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

Тип void

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

Лекция 1: 123 || Лекция 2 >
Dana Kanatkyzi
Dana Kanatkyzi
Здравствуйте.Помогите решить задачу минимум 4 чисел.Условие такое:"Напишите функцию int min (int a, int b, int c, int d) (C/C++)"находящую наименьшее из четырех данных чисел."Заранее спасибо!
Юрий Семевский
Юрий Семевский
Россия, Санкт-Петербург
Александр Богдашов
Александр Богдашов
Россия