Курс C с нуля: часть 3 – типы данных

 

C_logo
Предыдущая часть – Курс C с нуля: часть 2 – printf и scanf.

  • типы данных в C – это формат хранения данных, в которых переменная может хранить данные для выполнения с ними дальнейших действий;
  • тип данных используется для объявления переменной перед ее использованием в программе;
  • размер переменной, константы или массива определяется ее типом данных.

С – типы данных

В C имеется четыре основных группы типов данных

Типы
Data Types
1 базовые типы int, char, float, double
2 перечисления enum
3 производные типы pointer, array, structure, union
4 тип void void

1. Базовые типы данных в C

1.1. тип данных integer

  • Тип integer (целочисленные данные) позволяет хранить в перменной числа;
  • для определения типа integer используется ключевое слово “int“;
  • размер данных типа int может быть от 2, 4 или 8 байт;
  • размер зависит от типа процессора – для 16-ти битных машин это будет 2 байта (16 бит), 4 байта (32 бита) для машин х32, и 8 байт (64 бита) – для 64-х битных процессоров;
  • переменная типа int (2 байта) может хранить значение от  -32,768 до +32,767;
  • переменная типа int (4 байта) может хранить значение от-2,147,483,648 до +2,147,483,647;
  • если вам потребуется хранить большее число, которое превышает лимит int – вы можете использовать такие типы как long int и long long int.

Примечание:

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

1.2. тип данных character:

  • тип данных char (character) позволяет переменной хранить только один символ;
  • размер хранилища типа char всегда будет равен одному байту;
  • для определения типа character используется ключевое слово “char“;
  • мы рассмотрим строки (strigns) позже, что бы увидеть – как хранить более 1-го символа в переменной.

1.3. тип данных floating point:

Тип данных с плавающей точкой может быть двух видов:

  1. float
  2. double

1. float:

  • тип данных с плавающей точкой используется для хранения десятичных чисел;
  • размер выделяемой памяти под тип float – 4 байта, но так же зависит от архитектуры ЦПУ, как и тип int;
  • во float можно хранить числа с 6-ю символами после точки, например – 10.456789;
  • максимально допустимый размер для данных этого типа – от 1.2E-38 до 3.4E+38.

2. double:

  • тип double аналогичен float – но может хранить до 10 символов после точки;
  • максимально допустимый размер для данных этого типа – от 1E–37 до 1E+37.

1.3.1. функция sizeof():

Функция sizeof() используется для получения размера памяти, выделяемой для типа данных на конкретной машине.

Например:

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

int main()
{
	int a;
	char b;
	float c;
	double d;

	printf("Storage size for int data type:%d n",sizeof(a));
	printf("Storage size for char data type:%d n",sizeof(b));
	printf("Storage size for float data type:%d n",sizeof(c));
	printf("Storage size for double data type:%dn",sizeof(d));

	return 0;
}

Результат:

$ ./sizeof
Storage size for int data type:4
Storage size for char data type:1
Storage size for float data type:4
Storage size for double data type:8

1.3.2. модификаторы типов данных в C:

  • размер памяти, выделяемой переменной, определяется модификаторами;
  • модификаторы указываются перед типом данных, который необходимо изменить;
  • например, для типа int выделяется 4 байта (на 32-х битной системе), которые мы можем увеличить до 8 байт с помощью long int – или уменьшить до 2-х, с помощью модификатора short int;
  • модификаторы так же называют “описателями” и “квалификаторами”.

В C имеется 5 типов модификаторов типов данных:

  1. short
  2. long
  3. signed
  4. unsigned
  5. long long

В таблице ниже представлены возможные комбинации и размеры памяти, выделяемой при использовании различных типов данных:

S.No C Data types storage Size Range
1 char 1 –127 to 127
2 int 2 –32,767 to 32,767
3 float 4 1E–37 to 1E+37 with six digits of precision
4 double 8 1E–37 to 1E+37 with ten digits of precision
5 long double 10 1E–37 to 1E+37 with ten digits of precision
6 long int 4 –2,147,483,647 to 2,147,483,647
7 short int 2 –32,767 to 32,767
8 unsigned short int 2 0 to 65,535
9 signed short int</td> 2 –32,767 to 32,767
10 long long int 8 –(2power(63) –1) to 2(power)63 –1
11 signed long int 4 –2,147,483,647 to 2,147,483,647
12 unsigned long int 4 0 to 4,294,967,295
13 unsigned long long int 8 2(power)64 –1

2. перечисляемый тип данных в C:

  • “перечисляемый тип” так же называют enumerationперечисление;
  • перечисляемый тип данных состоит из целочисленных именованных констант в виде списка;
  • по умолчанию – первой константе присваивается значение 0, которое увеличивается на 1 для каждого следующего элемента.

Синтаксис перечислений выглядит так:

enum тег {список перечисления} список переменных;

Примеры перечисления:

  • enum month { Jan, Feb, Mar } – Jan будет равен 0, Feb 1, Mar == 2;
  • enum month { Jan = 1, Feb, Mar } – Jan будет равен 1, Feb 2, Mac == 3;
  • enum month { Jan = 20, Feb, Mar } – Jan будет равен 20, Feb 21, Mac == 22;

Аналогично можно использовать директиву препроцессора #define:

#define Jan 20;
#define Feb 21;
#define Mar 22;

C – enum пример программы:

#include <stdio.h>

int main() {

	enum MONTH { Jan = 0, Feb, Mar };
	enum MONTH month = Mar;

	if(month == 0)
		printf("Value of Jann");
	else if(month == 1)
		printf("Month is Febn");
	else if(month == 2)
		printf("Month is Marn");

	return 0;
}

Результат ее работы:

$ ./enum
Month is Mar

Массивы, указатели, структуры и объединения (unions) называются “производными типами данных”, и будут рассмотрены позже.

4. тип данны void:

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

Продолжение – Курс C с нуля: часть 4 – токены и ключевые слова.