Добавил:
Лабы/курсовые по программированию (С++/Verilog HDL), Теория и Практика Помехоустойчивого Кодирования Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
1сем Дагаев / progr_su_3.ppt
Скачиваний:
10
Добавлен:
09.03.2022
Размер:
379.39 Кб
Скачать

Типы данных в C

Простые типы

Целые

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

Указатели

Перечислимый тип

Пустой тип (void)

Составные типы

массивы

структуры

объединения

Целые типы данных

char

1

байт

short

2

байта

long

4

байта

int

платформозависимый тип

sizeof int - определение размера памяти, выделяемой для переменной заданного типа

Знаковые и беззнаковые типы

signed unsigned

signed char ch; // -128 .. 127

unsigned char ch; // 0 .. 255

signed short s; // -32 768 .. 32 767

unsigned short s; // 0 .. 65 535

signed int d; // -2 147 483 648 .. 2 147 483 647

unsigned int d; // 0 .. 4 294 967 295

Вещественные типы данных

float — 4 байта (3.4 *10-38 до 3.4*10+38) double — 8 байтов (1.7 *10-308 до 1.7*10+308) long double — 10 байтов

Формат числа с плавающей точкой:

+/- m*2 p

Где 2 — основание системы счисления, m — мантисса, p - показатель степени

float:

Знак - 1бит

Вычисление арифметических выражений

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

Приоритеты типов данных, используемые для неявного преобразования:

long double → double → float → unsigned long (int) → signed long (int) → unsigned short → signed short → unsigned char → signed char

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

int b; double f = 13.25; b = (int) f %10;

3. Приоритеты арифметических операций:

1. ++ -- 2. * / % 3. + - 4. = *= /= %= += -=

Указатели

Объявление типизированного указателя:

int* ptr; float* ptr; char* ptr;

Объявление бестипового указателя:

void* ptr;

Инициализация переменной-указателя:

int a = 5; int* ptr = &a;

Косвенная адресация: int b = *ptr;

a : 5 b : *ptr

ptr : адрес a

Выражения, содержащие указатели

int a = 10, b = 5; int * ptra = &a; int* ptrb = &b;

*ptrb = *ptra + 2 * *ptrb;

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

Преобразование типов указателей

старший байт

младший байт

unsigned int a = 0xddcc; void* ptr = &a;

0unsigned0 0 0 0 0 0 0char0 0 0ch0 0=0 *0(unsigned0 1 1 0 1 1 1char*0 1 1 )ptr;1 0 0 1

printf(''%x %d'', a, ch);

ptr

1 0 0

На экране: ddcc 204

Адресная арифметика

Операции над указателями:

присваивание

ptr1 = ptr2;

инкремент

ptr1++;

декремент

ptr1--;

сложение

ptr2 = ptr1 + 2;

вычитание

ptr2 = ptr1 — 3;

где ptr1 и ptr2 — типизированные* указатели

Пример использования указателей

Задача: в вещественную переменную ввести число. Просмотреть содержимое каждого байта указанной переменной.

#include <stdio.h>

Ввели: 0.21875 (0.001112)

 

 

Ответ:

2 байт — 0

3 байт — 96

4 байт - 62

int main()

 

1 байт — 0

 

 

 

 

 

 

 

 

 

 

{

 

 

 

 

 

 

Ввели: -0.21875 (-0.001112)

 

float num;

 

 

 

Ответ:

 

 

 

scanf("%f",&num);

1 байт — 0

2 байт — 0

3 байт — 96

4 байт - 190

 

 

 

 

unsigned char*pbyte=(unsigned char*)&num;

 

printf("1 byte

%u

", *pbyte);

 

 

 

printf("2 byte

%u

", *(pbyte+1));

 

 

printf("3 byte

%u

", *(pbyte+2));

 

 

printf("4 byte

%u

", *(pbyte+3));

 

 

return 0;

 

 

 

 

 

}

 

 

 

 

 

Соседние файлы в папке 1сем Дагаев