Скалярные типы данных, операции, преобразование типов.
В С можно использовать различные типы данных для представления хранимой и обрабатываемой информации.
- Типы данных и элементы памяти.
Тип задается набором допустимых значений и набором действий, которые можно совершать над каждой переменной рассматриваемого типа. Переменные типизируются посредством их описаний.
Выражения типизируются посредством содержащих в них операций.
В С имеется множество предопределенных типов данных, включая несколько видов целых, вещественных, указателей, переменных, массивов, функций, объединений, структур и тип 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
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 (постфиксное более приор.) |
sizeof | Определение размера переменной в байтах |
(тип) | Приведение к типу |
~ | Побитовое отрицание |
! | Логическое НЕ |
— | Унарный минус |
Определение адреса | |
* | Обращение по адресу |
*,/,% | Умножение, деление, остаток |
+,- | Сложение, вычитание |
Сдвиг влево, сдвиг вправо | |
,= | Сравнение |
= =, != | Равенство, неравенство |
Побитовое И | |
^ | Побитовое ИСКЛЮЧАЮЩЕЕ ИЛИ |
| | Побитовое ИЛИ |
Логическое И | |
|| | Логическое ИЛИ |
?: | Условный оператор |
=,+=,=,*=,/=,%=,==,^=,|=,= | Присваивание и замещение |
, | Операция запятая, которая предписывает последовательное вычисление выражений |
Операции отношения
Логические выражения строятся из операций отношения и вырабатывают в качестве результата значение типа int. Если результат равен 0, то считается, что логическое выражение ложно, в противном случае – истинно. Если в логическом выражении не используются скобки, то оно вычисляется слева направо. Вычисление прекращается, как только результат становится определенным. Такой способ вычисления логических выражений называется усечением. Например
if (ab||cd||ef)
Вычисление выражения прерывается, как только выясняется, что, либо ab, либо cd, либо ef.
Усечение с успехом может быть использовано для задания корректного порядка вычислений в логических выражениях.
Например, логическое выражение
if (b!=0.0a/b12.4)
Имеет больший смысл, чем логическое выражение
if (a/b12.4b!=0.0)
Побитовые операции
Операнд или операнды побитовых операций должны быть целого типа. Побитовые операции обычно используются в приложениях, где требуется манипуляция с битами на нижнем уровне.
Операции ,|,^ определяются следующим образом
И | ||
ИЛИ | ||
ИСК.ИЛИ | ||
Операции служат для сдвига последовательности битов, соответственно, влево и вправо.
Эти операции можно применять для деления или умножения на число, равное степени 2, в соответствии со следующими правилами:
xn – эквивалентно делению х на
x
Пример
123=0000000001111011
123 0000111101100000=3936
1231 — 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
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
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
Статьи к прочтению:
- Сказка – умница и прелесть, ей повсюду путь открыт!
- Скопируйте формат второго слайда на третий и четвертый слайды.
Скалярный Трансформатор Романова — Теория
Похожие статьи:
-
Типы данных и операции в языке си. выражения
Типы данных. Программа на процедурных языках, к которым относится Си, представляет собой описание операций над величинами различных типов. Тип определяет…
-
В Си существует два дополнительных указателя формата, с помощью которых можно переводить данные типа int из десятичной в восьмеричную и шестнадцатеричную…