Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка_По_А_Я.docx
Скачиваний:
1
Добавлен:
18.11.2018
Размер:
90.19 Кб
Скачать

1.3.3. Операции унарный минус, отрицание и дополнение

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

Пример:

double u = 5;

u = -u; /* переменной u присваивается ее отрицание,

т.е. u принимает значение -5 */

Операция логического отрицания "НЕ" (!) вырабатывает значение 0, если операнд есть истина (не нуль), и значение 1, если операнд равен нулю (0). Результат имеет тип int. Операнд должен быть целого или плавающего типа.

Пример:

int t, z=0;

t=!z;

Переменная t получит значение равное 1, так как переменная z имела значение равное 0 (ложно).

Операция двоичного дополнения (~) вырабатывает двоичное дополнение своего операнда. Операнд должен быть целого типа. Осуществляется обычное арифметическое преобразование, результат имеет тип операнда после преобразования.

Пример:

char b = '9';

unsigned char f;

b = ~f;

Шестнадцатеричное значение символа '9' равно 39. В результате операции ~f будет получено шестнадцатеричное значение С6, что соответствует символу 'ц'.

1.3.4. Операции разадресации и адреса

На первое время нас будет интересовать только операция адреса.

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

Примеры:

int t;

scanf(”%i”, &t);

/* ввести с клавиатуры целочисленное значение ипоместиь его в

оперативной памяти, начиная с байта с адресом &t */

1.3.5. Операция sizeof

С помощью операции sizeof можно определить размер памяти, которая соответствует идентификатору или типу. Операция sizeof имеет следующий формат:

sizeof(выражение) .

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

Пример:

int a1,i,j;

double t;

i= sizeof(a1);

j= sizeof(double);

Переменная i получит значение, равное 4, переменная j - значение, равное 8.

1.3.6. Мультипликативные операции

К этому классу операций относятся операции умножения (*), деления (/) и получение остатка от деления (%). Операндами операции (%) должны быть целые числа. Отметим, что типы операндов операций умножения и деления могут отличаться, и для них справедливы правила преобразования типов. Типом результата является тип операндов после преобразования.

Операция умножения (*) выполняет умножение операндов.

int i=5;

float f=0.2;

double g,z;

g=f*i;

Тип произведения i и f преобразуется к типу double, затем результат присваивается переменной g.

Операция деления (/) выполняет деление первого операнда на второй. Если две целые величины не делятся нацело, то результат округляется в сторону нуля.

При попытке деления на ноль выдается сообщение во время выполнения.

int i=49, j=10, n, m;

n = i/j; /* результат 4 */

m = i/(-j); /* результат -4 */

Операция остаток от деления (%) дает остаток от деления первого операнда на второй.

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

int n = 49, m = 10, i, j, k, l;

i = n % m; /* 9 */

j = n % (-m); /* 9 */

k = (-n) % m; /* -9 */

l = (-n) % (-m); /* -9 */