Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Представление_данных!!!_—_копия.docx
Скачиваний:
0
Добавлен:
11.02.2026
Размер:
90.14 Кб
Скачать

Представление данных

Данные это формализованное представление информации.

В компьютерной программе данные – это значение объектов программы. Данные С++ могут быть в виде констант и переменных.

Данные, которые не изменяются в программе, называются константами.

Данные зафиксированные в программе и изменяемые в ней в процессе обработки являются переменными.

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

Понятие типа данных.

Тип данных характеризует:

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

  • набор допустимых операций (действий);

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

Классификация данных языка С++. Основные и производные типы

Все типы данных можно подразделить на простые (основные) — они предопределены стандартом языка, и сложные (или составные) — задаются пользователем.

Данные простого типа нельзя разложить на более простые составляющие без потери сущности данного.

Простые типы данных создают основу для построения более сложных типов: массивов, структур, классов.

Простые типы в языке C++ — это целые, вещественные типы, символьный и логический тип и тип void.

Для определения и описания переменных основных типов используются следующие ключевые слова:

  • char (символьный);

  • short (короткий целый);

  • int (целый);

  • long (длинный целый);

  • float (вещественный);

  • double (вещественный с удвоенной точностью);

  • void (отсутствие значения).

В табл. 1 приведены основные типы данных с диапазоном значений и назначением типов.

В таблице базовыми типами являются: char, int, float, double, void.

Остальные получаются из них с использованием модификаторов типа:

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

Целые типы

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

Основным и наиболее употребительным целым типом является тип int.

Гораздо реже используют его разновидности: short (короткое целое) и long (длинное целое).

Таблица 1

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

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

Кроме знаковых чисел на C++ можно использовать без знаковые.

В этом случае все разряды участвуют в формировании целого числа.

При описании без знаковых целых переменных добавляется слово unsigned (без знака).

Для 32-разрядных компиляторов, которые не делают различия между целыми типами int и long целые типы представлены для сравнения в табл.2.

Таблица 1

Целые типы для 32-разрядных компиляторов

Тип данных

Размер,байт

Диапазон значений

char

1

-128 ... 127 (-27 – 27-1)

short

2

-32768 ... 32767 (-215 – 215-1)

int

4

-2147483648 ... 2147483647 (-231 – 231-1)

long

4

-2147483648 ... 2147483647 (-231 – 231-1)

unsigned char

1

0 ... 255 ( 0 – 28-1)

unsigned short

2

0 ... 65535 ( 0 – 216-1)

unsigned int 

4

0 ... 4294967295 ( 0 – 232-1)

unsigned long

4

0 ... 4294967295 ( 0 – 232-1)

Простые типы данных. Целочисленные типы.

1. short, short int, signed short – синонимы коротких целых со знаком

2. unsigned short – короткие целые без знака

3. int, signed int – целые со знаком

4. unsigned, unsigned int– целые без знака.

5. long, long int – длинные целые со знаком.

6. unsigned long, unsigned long int

7. int64, long long–сверхдлинные знаковые 8 байт (от -263 до 263-1)

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

В чем разница между int и long на С++?

В настоящее время появились 64-разрядные процессоры. Необходимо различать 16-разрядные целые числа, 32-разрядные целые числа и 64- разрядные целые числа.

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

Поэтому в стандарте C принято, что

sizeof (short ) <= sizeof( int )

sizeof( int ) <= sizeof( long )

sizeof( long ) <= sizeof( long long )

У разработчиков компиляторов есть свобода выбора, какая разрядность будет у типа long и других целочисленных типов. Например, разрядность типа long может составлять не `32 бита, а 64 бита.

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

На одних 64-битовых платформах тип long и тип long long могут иметь 64-битовую разрядность. На других 64-битовых платформах тип long может быть 32-битовым и тип int также может быть 32-битовым, а тип long long - 64 битовым.

Тем не менее ранг типа long long больше ранга типа long, а тип long в свою очередь имеет ранг выше, чем тип int.

На этом основываются правила преобразования типов в выражениях. Например, если тип long и тип int имеют разрядность равную 32 битам, то в следующем фрагменте кода

long x = 0;

unsigned int y = 0;

x + y;

тип выражения x + y имеет тип unsigned long.

В языке С++ система целочисленных типов обладает тем свойством, что

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

т.е. вполне возможно, что размеры (и диапазоны) этих типов все будут различными.

В языке С, по каким-то историческим причинам, это соотношение определяется как

диапазон (signed char) ⊆ диапазон(short) ⊆ диапазон(int) ⊆ диапазон(long) ⊆ диапазон (long long)

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

То, что у вас на какой-то платформе тип long совпал по представлению с типом int является лишь особенностью вашей платформы.

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

В стандарте C++ для представления символьной информации есть два типа данных, пригодных для этой цели, — это типы char и wchar_t.

Тип char используется для представления символов в соответствии с системой кодировки ASCII (American Standard Code for Information Interchange — Американский стандартный код обмена информации).

Это семибитовый код, его достаточно для кодировки 128 различных символов с кодами от 0 до 127.

Символы с кодами от 128 до 255 используются для кодирования национальных алфавитов, символов псевдографики и др.

Тип wchar_t предназначен для работы с набором символов, для кодировки которых недостаточно 1 байта, например, Unicode.

Размер типа wchar_t обычно равен 2 байтам. Если в программе необходимо использовать строковые константы типа wchar_t, то их записывают с префиксом L, например, L"Слово".

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

#include <iostream>

using namespace std;

char c, b ;

void main ()

{ c=’*’; b= 55;

cout<<c<<’\t’<<b<<’\t’;

cout<< (int)c;

}

Результатом будет:

* 7 42

Вывелись символы '*' и символ с кодом 55 – символ '7'. И код символа '*', как результат приведения типа символа к целому типу.

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

Логический (булевый) тип обозначается словом bool.

Данные булевого типа могут принимать только два значения: true и false и занимают в памяти 1 байт. Значение false обычно равно числу 0, значение true — числу 1.

Вещественные типы

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

Имеется три вещественных типа данных: float, double и long double.

Основным считается тип double. Так, все математические функции по умолчанию работают именно с типом double.

В табл. 3 приведены основные характеристики вещественных типов.

Таблица 3

Основные характеристики вещественных типов

Тип данных

Размер, байт

Диапазон

абсолютных величин

Точность, количество десятичных цифр

float

4

от 3.4Е—38 до 3.4Е+38

7— 8

double

8

от 1.7Е—308 до 1.7Е+308

15— 16

Long double

10 (12)

от 3.4E-4932 до 1.1E+4932

19 — 20

Рекомендуется везде использовать тип double.

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

#include "stdafx.h"

#include <iostream>

// библиотека манипулирования вводом/выводом

#include<iomanip>

// заголовочный файл математических функций

#include<cmath>

using namespace std;

int main( )

{

cout // заголовки столбцов

<< " data type " << "byte" << " " << " max value " <<endl

//вычисляем максимальное значение для типа данных bool

<< "bool ="<<sizeof(bool) << " " << fixed <<setprecision(2)<< (pow(2,sizeof(bool) * 8.0) - 1) <<endl

//вычисляем максимальное значение для типа данных char

<< "char = "<<sizeof(char) << " " << fixed <<setprecision(2)<< (pow(2,sizeof(char) * 8.0) - 1) <<endl

//вычисляем максимальное значение для типа данных short int

<< "short int = " <<sizeof(short int) << " " << fixed <<setprecision(2) << (pow(2,sizeof(short int) * 8.0 - 1) - 1) <<endl

//вычисляем макс. Значение для типа данных unsigned short int<< "unsigned short int=" <<sizeof(unsigned short int) << " " << fixed <<setprecision(2)<< (pow(2,sizeof(unsigned short int) * 8.0) - 1) <<endl

//вычисляем максимальное значение для типа данных int

<< "int= " <<sizeof(int)<< " " << fixed <<setprecision(2)<< (pow(2,sizeof(int) * 8.0 - 1) - 1) <<endl

//вычисляем макс. значение для типа данных unsigned int

<< "unsigned int = " <<sizeof(unsigned int) << " " << fixed <<setprecision(2)<< (pow(2,sizeof(unsigned int) * 8.0) - 1) <<endl

//вычисляем максимальное значение для типа данных long int<< "long int = " <<sizeof(long int) << " " << fixed <<setprecision(2)<< (pow(2,sizeof(long int) * 8.0 - 1) - 1) <<endl

//вычисляем макс. значениедля типа данных unsigned long int<< "unsigned long int = " <<sizeof(unsigned long int) << " "<< fixed <<setprecision(2)<<(pow(2,sizeof(unsigned long int) * 8.0) - 1) <<endl

system("pause");

return 0;}

Результат:

data type byte max value

bool = 1 255.00

char= 1 255.00

short int = 2 32767.00

unsigned short int = 2 65535.00

int = 4 2147483647.00

unsigned int = 4 4294967295.00

long int= 4 2147483647.00

unsigned long int = 4 4294967295.00

Для продолжения нажмите любую клавишу . . .

#include "stdafx.h"

#include <iostream>

// библиотека манипулирования вводом/выводом

#include<iomanip>

// заголовочный файл математических функций

#include<cmath>

using namespace std;

int main()

{

cout // заголовки столбцов

<< " data type " << "byte" << " " << " max value " << endl

//вычисляем максимальное значение для типа данных bool

<< "bool =" << sizeof(bool) << " " << fixed << setprecision(2) << (pow(2, sizeof(bool) * 8.0) - 1) << endl

//вычисляем максимальное значение для типа данных char

<< "char = " << sizeof(char) << " "

<< fixed << setprecision(2) << (pow(2, sizeof(char) * 8.0) - 1) << endl

//вычисляем максимальное значение для типа данных short int

<< "short int = " << sizeof(short int) << " "

<< fixed << setprecision(2) << (pow(2, sizeof(short int) * 8.0 - 1) - 1) << endl

//вычисляем макс. Значение для типа данных unsigned short int<< "unsigned short int=" <<sizeof(unsigned short int) << " " << fixed <<setprecision(2)<< (pow(2,sizeof(unsigned short int) * 8.0) - 1) <<endl

//вычисляем максимальное значение для типа данных int

<< "int= " << sizeof(int) << " "

<< fixed << setprecision(2) << (pow(2, sizeof(int) * 8.0 - 1) - 1) << endl

//вычисляем макс. значение для типа данных unsigned int

<< "unsigned int = " << sizeof(unsigned int) << " " << fixed << setprecision(2) << (pow(2, sizeof(unsigned int) * 8.0) - 1) << endl

//вычисляем максимальное значение для типа данных long int

<< "long int = " <<sizeof(long int) << " " << fixed <<setprecision(2)<< (pow(2,sizeof(long int) * 8.0 - 1) - 1) <<endl

//вычисляем макс. значениедля типа данных unsigned long int

<< "unsigned long int = " <<sizeof(unsigned long int) << " "<< fixed <<setprecision(2)<<(pow(2,sizeof(unsigned long int) * 8.0) - 1) <<endl;

system("pause");

return 0;

}

Тип void

Тип void — самый необычный тип данных языка C++. Нельзя определить переменную этого типа. Тем не менее, это очень полезный тип данных. Он используется:

  • для определения функций, которые не возвращают результата своей работы;

  • для указания того, что список параметров функции пуст;

  • а также этот тип является базовым для работы с указателями.

Указатель на тип void - указатель ни на что, но который может быть приведен к любому типу указателей.

Так всё программирование с использованием Win32 API построено на применении указателей на тип void.

Новое обозначение типа

Используя спецификатор typedef можно в программе вводить удобное обозначение для сложных обозначений типов по следующему правилу: