Скалярные типы данных, операции, преобразование типов.

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

  1. Типы данных и элементы памяти.

Тип задается набором допустимых значений и набором действий, которые можно совершать над каждой переменной рассматриваемого типа. Переменные типизируются посредством их описаний.

Выражения типизируются посредством содержащих в них операций.

В С имеется множество предопределенных типов данных, включая несколько видов целых, вещественных, указателей, переменных, массивов, функций, объединений, структур и тип void (отсутствие типа).

Скалярные типы: указатель, арифметический (целый, вещественный), перечисляемый.

Тип void.

Функции.

Агрегатные типы: массив, структура, объединение.

В следующей таблице представлены типы С, их размеры и диапазоны

Тип Размер в байтах Диапазон значений
char, signed char -128…127
unsigned char 0…255
int, signed int, short int, signed short int -32768…32767
unsigned int, unsigned short int 0…65535
long int, signed long int -2147483648…2147483647
unsigned long int 0…4294967295
float 3.4E-38…3.4E38
double 1.7E-308…1.7E308
long double 3.4E-4932…3.4E4932
pointer  
pointer  

Переменные целого типа

Переменная описываются с помощью спецификатора типа (см. таблицу) и при описании ей может быть присвоено начальное значение.

Пример

int age=20, height=170; // возраст, рост

unsigned weight=height/2; // вес

long index; // индекс

Замечание Если используются спецификаторы unsigned, short, long, то int можно опускать.

Допустимые операции над целочисленными операндами указаны в таблице

Арифметические операции
Обозначение Операция
+ Унарный плюс, сложение
- Унарный минус, вычитание
* Умножение
/ Деление
% Остаток от деления
x= Изменить и заменить, где х={+,-,*,/,%}
++ Инкремент (увеличение на 1)
-- Декремент (уменьшение на 1)
Логические операции
Обозначение Операция
&& И (логическое умножение)
|| ИЛИ (логическое сложение)
! НЕ (отрицание)
= = Равно
! = Не равно
> Больше
< Меньше
>= Больше или равно
<= Меньше или равно
Битовые операции
Обозначение Операция
& И (and)
| ИЛИ (or)
^ ИСЛЮЧАЮЩЕЕ ИЛИ
~ Отрицание
>> Сдвиг вправо
<< Сдвиг влево
x= Изменить и заменить, где x={&,|,^,>>,<<)

Переменные вещественного типа

Для описания таких переменных используются спецификаторы float, double, long double.

Пример

float force=12.78, /* сила */

acceleration=1.234; /* ускорение */

double height; /* высота */

Операции над вещественными операндами, аналогичны арифметическим и логическим операциям над целочисленными операндами (см. предыдущую таблицу). Исключение – операция % (остаток от деления).

Символьные переменные

Для описания символьных переменных используются спецификаторы char, signed char, unsigned char.Можно задавать начальные значения. Пример

char ch=’$’, ans=’n’, ascii_value=65;

Замечание В выражениях переменные типа char могут смешиваться с переменными типа int, поскольку те и другие принадлежат к целому типу. Пример

#include <stdio.h>

Main()

{

char ch=’a’, ans;

printf(“значение ch+3=%c”,ch+3);

ans=ch%3;

printf((“\n\n значение ans=%d\n”,ans);

}

Программа выводит на экран следующие строки:

Значение ch+3=d

Значение ans=1

Строковые переменные

Для определения строковой переменной необходимо использовать тип char и указать максимальное число символов, которое может содержать строка. В С нет стандартного типа строкаи строка объявляется, как массив символов, но для работы с массивом символов, как со строкой имеется набор библиотечных функций.

Описание в общем случае:

char name[n];

name – имя массива;

n– размер массива.

Пример

char str[80];

Работу со строковыми данными рассмотрим подробнее при изучении массивов и функций работы со строками.

  1. Приоритет и порядок выполнения операций.

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

Операция Назначение
[ ] Задание элемента массива
( ) Вызов функции
. Выбор поля структуры
-> Выделение поля структуры с помощью указателя
++, -- Постфиксное/префиксное увеличение на 1 (постфиксное более приор.)
sizeof Определение размера переменной в байтах
(тип) Приведение к типу
~ Побитовое отрицание
! Логическое НЕ
- Унарный минус
& Определение адреса
* Обращение по адресу
*,/,% Умножение, деление, остаток
+,- Сложение, вычитание
<<,>> Сдвиг влево, сдвиг вправо
<,>,<=,>= Сравнение
= =, != Равенство, неравенство
& Побитовое И
^ Побитовое ИСКЛЮЧАЮЩЕЕ ИЛИ
| Побитовое ИЛИ
&& Логическое И
|| Логическое ИЛИ
?: Условный оператор
=,+=,=,*=,/=,%=,&= &=,^=,|=,<<=,>>= Присваивание и замещение
, Операция запятая, которая предписывает последовательное вычисление выражений

Операции отношения

Логические выражения строятся из операций отношения и вырабатывают в качестве результата значение типа int. Если результат равен 0, то считается, что логическое выражение ложно, в противном случае – истинно. Если в логическом выражении не используются скобки, то оно вычисляется слева направо. Вычисление прекращается, как только результат становится определенным. Такой способ вычисления логических выражений называется усечением. Например

if (a>b||c>d||e>f)

Вычисление выражения прерывается, как только выясняется, что, либо a>b, либо c>d, либо e>f.

Усечение с успехом может быть использовано для задания корректного порядка вычислений в логических выражениях.

Например, логическое выражение

if (b!=0.0&&a/b>12.4)

Имеет больший смысл, чем логическое выражение

if (a/b>12.4&&b!=0.0)

Побитовые операции

Операнд или операнды побитовых операций должны быть целого типа. Побитовые операции обычно используются в приложениях, где требуется манипуляция с битами на нижнем уровне.

Операции &,|,^ определяются следующим образом

И
ИЛИ
ИСК. ИЛИ

Операции << и >>служат для сдвига последовательности битов, соответственно, влево и вправо.

Эти операции можно применять для деления или умножения на число, равное степени 2, в соответствии со следующими правилами:

x>>n – эквивалентно делению х на Скалярные типы данных, операции, преобразование типов. - student2.ru

x<<n– эквивалентно умножению хна Скалярные типы данных, операции, преобразование типов. - student2.ru

Пример

123=0000000001111011

123<<5 -> 0000111101100000=3936

123>>1 -> 00000000000111101=61

Операции присваивания

К этим операциям относятся: = , += , -= , *= , /= , %= , и префиксные и постфиксные операции ++ и --.

Все операции присваивают переменной результат вычисления выражения. Если тип левой части при присваивании отличается от типа правой части, то тип правой части приводится к типу левой. В одном операторе операция присваивания может встречаться несколько раз. Вычисление производится справа налево. Например

a=(b=c)*d;

Значению переменной b присваивается значение переменной c, затем выполняется операция умножения на dи результат присваивается переменной a.

Типичный пример использования многократного присваивания

a=b=c=d=e=f=0;

Операции += , -= , *= , /= являются укороченной формой записи операции присваивания, а именно:

a+=b; -> a=a+b; a-=b; -> a=a-b; a*=b; -> a=a*b; a/=b; -> a=a/b;

Постфиксные и префиксные операции ++ и -- используются для увеличения (инкремент) и уменьшения (декремент) на 1 значения переменной. Семантика указанных операций следующая:

++a ,а++– увеличение значения переменной a на 1 до (после) ее использования в выражении.

--a ,а-- – уменьшение значения переменной a на 1 до (после) ее использования в выражении.

Пример

#include <stdio.h>

Main()

{

int a,b,c=3,d=4,f=3,g,h=5,z=6,i;

a=z+(b=c*d*f+(g=h+(i=3)));

printf(“%d\n”,a);

}

Программа выводит на экран значение – 50.

Операция sizeof

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

Пример

#include <stdio.h>

Main()

{

Float a;

Int b;

Char c;

float d[500];

printf(“\n Размер памяти под целое %d”, sizeof(int));

printf(“\n Размер памяти под двойную точность %d”, sizeof(double));

printf(“\n Размер памяти под переменную a %d”, sizeof a);

printf(“\n Размер памяти под массив d %d”, sizeof d);

}

Результат работы программы

Размер памяти под целое 2

Наши рекомендации