Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Решенные оветы на теорию Си.docx
Скачиваний:
4
Добавлен:
01.03.2025
Размер:
167 Кб
Скачать
☆

5. Базовые типы данных. Определение имени типа. Перечисление.

Следующие типы относятся к базовым:

  • void - пустой тип, используется для создания указателей и указания того, что функция не возвращает значений;

  • int - целочисленный тип. Спецификторы размера short и long уточняют размер: два байта и четыре соответственно. Спецификаторы знака signed и unsigned определяют использовать ли последний бит для знака. Этот тип является типом по умолчанию;

  • float - тип для вещественных чисел;

  • double - тип для вещественных чисел двойной точности;

  • bool - логический тип. Значение 0 означает ложь, ненулевое значение истину;

  • char - символьный тип. Также этот тип может использоваться как целочисленный тип, к нему применимы спецификаторы знака;

Определение имени типа

typedef <тип> <новое имя> [размер]

Перечисление:

Тип

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

Размер (байт)

bool

true и false

1

signed char

-128 … 127

1

unsigned char

0 … 255

1

signed short int

-32 768 … 32 767

2

unsigned short int

0 … 65 535

2

signed long int

-2 147 483 648 … 2 147 483 647

4

unsigned long int

0 … 4 294 967 295

4

float

3.4e-38 … 3.4e+38

4

double

1.7e-308 … 1.7C+308

8

long double

3.4e-4932 … 3.4e+4932

10

enum

-32768...32767

2

long long int

-(2^63-1)...(2^63-1)

8

6. Представление данных в памяти компьютера.

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

1) перевести число N в двоичную систему счисления;

2) полученный результат дополнить слева незначащими нулями до k разрядов.

Для записи внутреннего представления целого отрицательного числа (-N) необходимо:

1) получить внутреннее представление положительного числа N;

2) обратный код этого числа заменой 0 на 1 и 1 на 0;

3) полученному числу прибавить 1.

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

Формат с плавающей точкой предполагает представление вещественного числа R в форме произведения мантиссы (т) на основание системы счисления (л) в некоторой целой степени, которую называют порядком (р):

Порядок указывает, на какое количество позиций и в каком направлении должна сместиться («переплыть») точка в мантиссе.Мантисса в нормализованной форме должна удовлетворять условию:

7. Явное / Неявное преобразование типов. Абстрактный описатель.

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

Неявное преобразование

Язык определяет набор стандартных преобразований между объектами встроенного типа, неявно выполняющихся компилятором в следующих случаях:

  • арифметическое выражение с операндами разных типов: все операнды приводятся к наибольшему типу из встретившихся. Это называется арифметическим преобразованием. Например:

int ival = 3;

double dva1 = 3.14159;

// ival преобразуется в double: 3.0

ival + dva1;

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

// 0 преобразуется в нулевой указатель типа int*

int *pi = 0;

// dva1 преобразуется в int: 3

ivat = dva1;

  • передача функции аргумента, тип которого отличается от типа соответствующего формального параметра. Тип фактического аргумента приводится к типу параметра:

extern double sqrt( double );

// 2 преобразуется в double: 2.0

cout << "Квадратный корень из 2: " << sqrt( 2 ) <<

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

double difference( int ivati, int iva12 )

{

// результат преобразуется в double

return ivati - iva12;

}

Арифметическое преобразование типов.

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

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

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

Если есть long double, то к нему, иначе к double, иначе float.

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

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

Исключение: преобразование unsigned int в long происходит только в том случае, если тип long способен вместить весь диапазон значений unsigned int. Иначе , оба операнда приводятся к unsigned long.

В случае отсутствия операндов типов unsigned long и long, используется тип unsigned int. Если же нет операндов и этого типа, то к int.

Явное преобразование типов