Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Материалы для подготовки к экзамену по ОП.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
297.52 Кб
Скачать

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

  • float — 4 байта,

  • long float — 8 байт

  • double — 8 байт

  • long double — 8 байт.

Тип

Размер, байт

Кол-во значащих знаков мантиссы

Минимальное значение

Максимальное значение

float

4

6-7

1.175494351 E –38

3.402823466 E +38

double

8

15-16

2.2250738585072014 E –308

1.7976931348623158 E +308

Переполнение переменных

Си не следит за переполнением переменных. Это значит, что постоянно увеличивая значение, скажем, переменной типа int в конце концов мы "сбросим значение"

#include <conio.h>

#include <stdio.h>

void main() {

unsigned a = 4294967295;

int b = 2147483647;

//Переполнение беззнакового типа

printf("%u\n", a);

a += 1;

printf("%u", a);

//Переполнение знакового типа

printf("%d\n", b);

b += 1;

printf("%d", b);

getch();

}

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

Постфиксное обозначение типа

При работе с числами можно с помощью литер в конце числа явно указывать его тип, например

  • 11 - число типа int

  • 10u - unsigned

  • 22l или 22L - long

  • 3890ll или 3890LL - long long (а также lL или Ll)

  • 80.0f или 80.f или 80.0F - float (обязательно наличие десятичной точки в записи)

  • 3.0 - число типа double

Экспоненциальная форма записи также по умолчанию обозначает число типа double.

#include<conio.h>

#include<stdio.h>

int main() {

printf("sizeof(int) = %d\n", sizeof(10));

printf("sizeof(unigned) = %d\n", sizeof(10u));

printf("sizeof(long) = %d\n", sizeof(10l));

printf("sizeof(long long) = %d\n", sizeof(10ll));

printf("sizeof(float) = %d\n", sizeof(10.f));

printf("sizeof(double) = %d\n", sizeof(10.));

printf("sizeof(double) = %d\n", sizeof(10e2));

getch();

}

Следующий код, однако, не будет приводить к ошибкам, потому что происходит неявное преобразование типа

int a = 10u;

double g = 3.f;

Шестнадцатеричный и восьмеричный формат

Во время работы с числами можно использовать шестнадцатеричный и восьмеричный формат представления. Числа в шестнадцатиричной системе счисления начинаются с 0x, в восьмеричной системе с нуля. Соответственное, если число начинается с нуля, то в нём не должно быть цифр выше 7:

#include<conio.h>

#include<stdio.h>

void main() {

int x = 0xFF;

int y = 077;

printf("hex x = %x\n", x);

printf("dec x = %d\n", x);

printf("oct x = %o\n", x);

printf("oct y = %o\n", y);

printf("dec y = %d\n", y);

printf("hex y = %x", y);

getch();

}