Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> Язык C

Типы данных в C: полное руководство по целочисленным, вещественным и производным типам

Классификация типов

Система типов C делится на 4 основные категории:

КатегорияОписаниеПримеры
Базовые (арифметические)Целые и вещественные числаint, float, double, char
Перечислимые (enum)Именованные целочисленные константыenum Color {RED, GREEN}
VoidОтсутствие типаvoid (функции без возврата, указатели)
ПроизводныеСоставные типыУказатели, массивы, структуры, объединения, функции

Целочисленные типы

Размеры и диапазоны зависят от реализации (минимумы гарантирует стандарт). Типичные значения для 64-битных систем (LP64):

ТипРазмер (байты)Диапазон (знаковый)Диапазон (беззнаковый)Формат printf/scanf
char / signed char1-128 … 1270 … 255%hhd / %hhu
unsigned char1—0 … 255%hhu
short / signed short2-32 768 … 32 7670 … 65 535%hd / %hu
unsigned short2—0 … 65 535%hu
int / signed int4-2 147 483 648 … 2 147 483 6470 … 4 294 967 295%d / %u
unsigned int4—0 … 4 294 967 295%u
long / signed long8 (Linux/macOS), 4 (Windows 64)±9.22e18 / ±2.14e90 … 1.84e19 / 4.29e9%ld / %lu
unsigned long8 / 4—0 … 1.84e19 / 4.29e9%lu
long long8±9.22e180 … 1.84e19%lld / %llu
unsigned long long8—0 … 1.84e19%llu

Точные размеры: <stdint.h> (C99)

Используйте эти типы для переносимого кода:

Макросы лимитов в <limits.h> и <stdint.h>: INT_MAX, UINT32_MAX, INT64_MIN и т.д.

Оператор sizeof

sizeof(int)        // размер типа в байтах (size_t)
sizeof variable    // размер переменной (без скобок для выражений)
sizeof(expression) // скобки обязательны для типов

sizeof — оператор компилятора, вычисляется на этапе компиляции (кроме VLA).

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

ТипРазмерДиапазон (прибл.)Точность (значимых цифр)Формат
float4 байта±1.2e-38 … ±3.4e+38~6-7 (23 бита мантиссы)%f, %e, %g
double8 байт±2.3e-308 … ±1.7e+308~15-16 (52 бита)%lf, %e, %g
long double10/12/16 байт±3.4e-4932 … ±1.1e+4932 (x86 80-бит)~19-33 (64+ бита)%Lf, %Le, %Lg

Константы: 3.14 (double), 3.14f (float), 3.14L (long double). Экспоненциальная форма: 1.5e-3, 2E10.

Макросы в <float.h>: FLT_DIG (6), DBL_DIG (15), LDBL_DIG, FLT_MAX, DBL_MIN и др.

Тип void

Обозначает «нет типа». Используется в трёх случаях:

  1. Функция не возвращает значение: void printHello(void);
  2. Функция не принимает параметров: int getRandom(void); (в C++ просто ()).
  3. Указатель на неопределённый тип: void *ptr; — «указатель на что-то». Используется в malloc, memcpy, колбэках. Требует приведения к конкретному типу при разыменовании.

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

Важно: char — это целочисленный тип (1 байт). Знаковый или беззнаковый — зависит от реализации. Для текста используйте char, для байтов — uint8_t / int8_t.

Кодировки: ASCII (0-127), UTF-8 (многобайтовые последовательности в char[]), широкие символы wchar_t (<wchar.h>), UTF-16/32 — char16_t, char32_t (C11).

Квалификаторы типов

Пример: определение размеров на платформе

#include <stdio.h>
#include <limits.h>
#include <float.h>
#include <stdint.h>

int main(void) {
    printf("=== Целочисленные ===\n");
    printf("char: %zu байт, %d ... %d\n", sizeof(char), CHAR_MIN, CHAR_MAX);
    printf("short: %zu байт, %d ... %d\n", sizeof(short), SHRT_MIN, SHRT_MAX);
    printf("int: %zu байт, %d ... %d\n", sizeof(int), INT_MIN, INT_MAX);
    printf("long: %zu байт, %ld ... %ld\n", sizeof(long), LONG_MIN, LONG_MAX);
    printf("long long: %zu байт, %lld ... %lld\n", sizeof(long long), LLONG_MIN, LLONG_MAX);
    printf("int32_t: %zu байт\n", sizeof(int32_t));
    printf("intptr_t: %zu байт\n", sizeof(intptr_t));
    printf("size_t: %zu байт\n", sizeof(size_t));

    printf("\n=== Вещественные ===\n");
    printf("float: %zu байт, %e ... %e, точность %d\n", sizeof(float), FLT_MIN, FLT_MAX, FLT_DIG);
    printf("double: %zu байт, %e ... %e, точность %d\n", sizeof(double), DBL_MIN, DBL_MAX, DBL_DIG);
    printf("long double: %zu байт, %Le ... %Le, точность %d\n", sizeof(long double), LDBL_MIN, LDBL_MAX, LDBL_DIG);

    printf("\nУказатель: %zu байт\n", sizeof(void*));
    return 0;
}

Язык C

  1. Понимание электрических коммутаторов: типы, функции и применения
  2. Мастерство C# переменных и примитивных типов данных: полное руководство
  3. Понимание типов данных C++: основы, модификаторы и лучшие практики
  4. Типы данных в C: int, float, char и другие — полное руководство
  5. Освоение типов данных в Python: практическое руководство
  6. Примитивные типы данных в Java: полное руководство с примерами
  7. Переменные, типы данных и константы в C — практическое руководство
  8. 5 моделей центров обработки данных: дизайн, кейсы и примеры
  9. Восемь ключевых моделей облачных вычислений 2021 года
  10. 8 распространённых типов утечек данных — реальные примеры и последствия