Лабораторная работа: Операции языка Cи
14. Взятие адреса применяется к любому идентификатору, с которым связана область ОЗУ. Возвращает логический адрес самого левого байта памяти, которую занимает этот идентификатор. Это могут быть переменные базовых типов, другие указатели, элементы массивов, структурные переменные. Для определения типа результата этой операции, надо добавить к типу аргумента одну звездочку.
Пример.
int x = 3, y, *px;
px = &x; //указатель px указывает на переменную x
y =* px; //y=3
*px = y+1; // x=4
Типом выражения &y является int*, а тип записи &px это int **.
15. Операция sizeof возвращает размер «чего угодно» в байтах. Например, sizeof(float) = 4, sizeof(20) = 2, для дальних адресов sizeof(float*) = 4.
16. Операция new выделяет динамическую память и введена в языке Си++. Ее аналогом в Си является функция malloc.
17. Операция delete освобождает динамическую память, выделенную ранее операцией new. Ее аналогом в Си является функция free.
Пример.
int *pi = newint;
*pi = 100;
deletepi;
18. Умножение * является обычной операцией.
19. Деление / осуществляется обычным образом, если один из аргументов имеет вещественный тип. Если оба аргумента – целые, то операция возвращает только целую часть результата.
20. Деление % применяется только для двух целых аргументов и возвращает целочисленный остаток от деления.
Например, 20.0/3 = 6.33333, 20/3 = 6, 20%3 = 2.
Пример. Имеет место тождество
b = a * (b/a) + b%a.
Пример. Если m – трехзначное целое число abc, то a = m/100, c = m%10, b = m%100/10.
Мультипликативные операции имеют одинаковый приоритет.
21. Аддитивные операции обычны.
22. Бинарная операция сдвига используется для двух аргументов только целого типа. Левый аргумент надо преобразовать к двоичному виду. Правый аргумент указывает, на сколько бит необходимо произвести сдвиг.
При сдвиге влево x << y левые биты числа x пропадают, новые биты справа заполняются нулями. Операция x << y равносильна умножению x × 2y .
23. При сдвиге вправо x >> y правые биты числа x пропадают, новые биты слева заполняются знаком числа x . Если x отрицательно, то новые биты равны 1, при положительном х новые биты равны 0. Операция x >> y равносильна делению нацело x / 2y .
Пример.
char x =20, y = -10;
unsigned char z =20;
Тогдаx >>2=0001 01002 >>2= 0000 01012 =5
x <<2=0001 01002<<2=0101 00002=80