Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
40
Добавлен:
16.04.2013
Размер:
41.98 Кб
Скачать

Лекция № 2.

Простые ( собственные ,предопределенные )типы данных.

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

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

  • Форму представления;

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

  • Допустимые операции, включая преобразование типа.

Размеры в

Типы данных байтах Диапазон значений Пример

bool 1 false, true

char 1 -128...127 ’A’ ’!’

signed char 1 - 128...127 20

unsigned char 1 0...255 200

int 2 - 32768...32767 200

unsigned int 2 0...65535 0xffff

short int 2 -32768...32767 100

unsigned short int 2 0...65535 40000

long int 4 -2147483648...

...2147486347 0xfffff

unsigned long int 4 0...4294967295 123456

float 4 3.4E-38...3.4E+38 2.35

-3.4E-38...-3.4E+38 1.3E+10

double 8 1.7E-308...1.7E+308 12.354

-1.7E-308...-1.7E+308 -78.35444

-2.5E+100

long double 10 3.4E-4932...1.1E+4932 8.5E-3000

-1.1E-4932...-3.4E+4932 8.5E+3000

Для определения количества байт используется оператор sizeof (для типа или объекта) .

cout << sizeof (int) << ‘< =’ << sizeof (long) <<endl

Диапазон целых значений определен в стандартном заголовочном файле limits.h

Например:

# define CHAR_BIT 8 //бит на символ

# define INT_MAX 2147483647 //int max

# define UNIT_MAX 429496729U //unsigned int max

Диапазон значений с плавающей точкой определен в стандартном заголовочном файле float.h.

Например, [2]

# define FLT_MIN ((float) 1.17549435e - 38 //float min

# define FLT_MAX((float) 3.40282347e +38 // float max

# define DBL_MAX 1.7976931348623157e // double max

В новых системах файл limits содержит шаблон numeric-limits < type >:: max( ) //

//максимальное значение для < типа >

Объявление и инициализация

Объявление переменной связывает имя переменной с типом.

//Вычисление площади круга

extern const double P1; // объявлено, не определено

int main ( )

{ double radius = 5.5; // объявлено, определено

// инициализировано

double area ; // объявлено, определено

// не инициализировано

cout <<’Площадь круга :’<< ( PI * radius * radius ) ;

Под radius и area память выделяется в системном стеке.

Объявление переменной является и определением ,если обеспечивается выделение памяти под переменную.

Определение может быть с инициализатором .

Для простых переменных это выглядит так

тип идентификатор = выражение

Например:

{ int i = 5; //инициализируется значением 5

char c1,c2 = ‘B’; //c1 не инициализировано

double x = 0.777, y = x + i;

cout << x <<’\ t’ << y; //вывод 0.777 5.777

cout <<c2; //вывод ‘B’

cout <<c1; //зависит от системы

...

}

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

Объявления могут встречаться в любом месте блока.

Традиционные преобразования

Любое арифметическое выражение х + y имеет тип и значение, если обе переменные одного типа, то и результат будет того же типа, если хватает места под значение

short + short int , если результат больше short.

Автоматическое преобразование выражения [2].

  1. Все bool,char,short или enum преобразуются до int. Целые типы, которые не могут быть представлены как int , повышаются до unsigned.

  2. Если после первого шага выражение остается смешанным, то операнд более низкого типа повышается до более высокого типа и значение выражения получает этот тип.

int < unsigned < long < unsigned long < float < double < long double

Может случиться что несколько unsigned приведет сразу к unsigned long.

Примеры:

char c; long lg; double d;

short s; float f; unsigned u; int i;

Выражение Тип

c - s/i int

u * 3.0 - i double

c + i int

c + 1.0 double

u*3 - i unsigned

f*3 - i float

3*s*lg long

d + s double

d = i ; // double

i = d; // зависит от реализации

// может быть отброшена

// дробная часть d

Явное преобразование типа, называемое приведением. Пусть i -целое, тогда

static _cast < double >( i )

Выполнит приведение значения i так , что выражение будет иметь тип double.

Еще пример:

х = static_cast < double >( static_cast < int >( y ) + 1)

Старая форма записи

( тип ) выражение тип ( выражение )

Например:

y = i / double ( 7 ) //разделит с двойной точностью

ptr = ( char *) ( i + 88 ); // целое к значению указателя.

Пример программы из [2]

//Перевод миль в километры

# include < iostream.h >

const double m_to_k = 1.609; //коэффициент преобразования

inline double mi_to_km (int miles)

{

return ( miles * m_to_k ) ;

}

int main ( )

{

int miles;

double kilometers;

do {cout <<’’\ n Введите расстояние в милях :’’);

cin >> miles;

kilometers = mi_to_km (miles)

cout <<’’\ n Это примерно’’

<< static_cast < int > ( kilometers )

<< ’’km ’’ <<endl;

} while ( miles >0 )

}

Выражения и операторы

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

Операция Название Пример Порядок

: : Глобальная об- : : name слева направо

ласть видимости

: : Область види- class name :: member

мости класса

. Выбор элемента

структуры или time.hour слева направо

класса

Выбор элемента pointer member

структуры или

класса

[ ] Доступ по индексу

массива pointer [expr]

( ) Вызов функции,конс- expr(expr_lst)

труирование значения type(expr_lst)

+ + Постфиксный инкре- lvalue ++

мент (j = i ++;равнозначно j = i ; i = i + 1);

-- Постфиксный декре- lvalue --

мент (j = i --;равнозначно j = i ; i = i - 1);

typeid ( ) идентификация типа typeid ( type )

идентификация типа

во время выполнения typeid (expr)

преобразование с про-

веркой

во время выполнения dynamic_cast

< type>(expr)

Соседние файлы в папке Тельминов (мб)