Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ТТП (методичка).doc
Скачиваний:
3
Добавлен:
10.11.2018
Размер:
2.24 Mб
Скачать
    1. Арифметические операции

К арифметическим операциям относятся: сложение +, вычитание , деление /, умножение * и остаток %. Все операции (за исключением остатка) определены для переменных целого и вещественного типа: char, int, long, float, double. Остаток не определен для переменных вещественного типа float и double.

Целочисленное сложение и вычитание выполняются без учета переполнения (overflow — переполнение). В приведенной ниже программе (Листинг 7) будут выведены следующие значения: 32767 и –32768. Для беззнаковых целых добавление единицы к наибольшему целому значению дает в результате нуль.

Листинг 7 — Арифметическое переполнение

/* overflow.c – пример арифметического переполнения. */

#include <stdio.h>

#include <conio.h>

void main()

{

int a = 32767;

unsigned b = 65535;

clrscr();

printf(“\nЗначение a = %d. Значение a + 1 = %d\n”,

a, a + 1);

printf(“\nЗначение b = %u. Значение b + 1 = %u\n”,

b, b + 1);

}

Рисунок 22 — Результат выполнения программы overflow.c

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

    1. Битовые операции

К битовым операциям относятся: отрицание ~, И &, ИЛИ |, исключающее ИЛИ ^, сдвиг вправо >> и сдвиг влево <<. В других языках программирования или в литераторе для обозначения битовых операций могут использоваться соответствующие английские слова: отрицание — not, И — and, ИЛИ — or, исключающее ИЛИ — xor. В таблице 5 приведены таблицы истинности битовых операций, а в таблице 6 представлены примеры выполнения битовых операций над целыми числами размером 1 байт.

Таблица 5 — Таблицы истинности битовых операций

Операция

Бит

операнда 1

операнда 2

результата

Отрицание ~

0

1

1

0

И &

0

0

0

0

1

0

1

0

0

1

1

1

ИЛИ |

0

0

0

0

1

1

1

0

1

1

1

1

Исключающее ИЛИ ^

0

0

0

0

1

1

1

0

1

1

1

0

Таблица 6 — Пример выполнения битовых операций над целыми числами размером 1 байт

Код

Система счисления

десятичная

шестнадцатеричная

двоичная

a = 23;

23

17

00010111

b = 81;

81

51

01010001

c = ~a;

232

E8

11101000

d = ~b;

174

AE

10101110

e = a & b;

17

11

00010001

f = a | b;

87

57

01010111

g = a ^ b;

70

46

01000110

h = a >> 2;

5

05

00000101

i = b << 3;

144

90

10010000

В листинге 8 представлен пример программы, использующей логические операции. Для вывода на экран чисел в двоичной системе счисления используется функция itoa() из библиотеки stdlib.h. Эта функция позволяет преобразовывать целое число, задаваемое первым параметром, в строку символов, задаваемую вторым параметром. Система счисления задается третьим параметром. Функция возвращает указатель на переданную ей строку символов, что позволяет ее использовать прямо в операторе вывода на экран. Спецификация вывода %16s задает вывод строки в поле шириной 16 символов. По умолчанию выравнивание осуществляется по правой границе поля.

Листинг 8 — Использование битовых операций

/* bitops.c – пример использования битовых операций. */

#include <stdio.h>

#include <conio.h>

#include <stdlib.h>

int main()

{

int a, b;

char str[25];

clrscr();

printf(“Введите a: ”);

scanf(“%d”, &a);

printf(“Введите b: ”);

scanf(“%d”, &b);

printf(“\na = %16s“, itoa(a, str, 2));

printf(“\nb = %16s“, itoa(b, str, 2));

printf(“\n NOT a = %16s“, itoa(~a, str, 2));

printf(“\na AND b = %16s“, itoa(a & b, str, 2));

printf(“\na OR b = %16s“, itoa(a | b, str, 2));

printf(“\na XOR b = %16s“, itoa(a ^ b, str, 2));

return 0;

}

Рисунок 23 — Результаты выполнения программы bitops.c