Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
GLAVA_10_Algoritmy_i_programmy.doc
Скачиваний:
7
Добавлен:
22.09.2019
Размер:
797.7 Кб
Скачать

6.14. Логические операции с числами

В главе 6.2. мы говорили об использовании логических операций and, or и not в логических выражениях. И имели в виду выражения, принимающие логические значения истина или ложь. Например, логическое выражение (x >= a) and (x <= b) принимает значение истина, если точка x принадлежит отрезку [a, b].

Язык Basic имеет полный набор логических операций:

NOT, AND, OR, XOR, EQV, IMP.

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

Табл.6.2. Значения результатов логических операций.

Левая

часть А

Правая

часть В

NOT A

A AND

B

A OR

B

A XOR

B

A EQV

B

A IMP

B

Ложь

Ложь

Истина

Ложь

Ложь

Ложь

Истина

Истина

Ложь

Истина

Истина

Ложь

Истина

Истина

Ложь

Истина

Истина

Ложь

Ложь

Ложь

Истина

Истина

Ложь

Ложь

Истина

Истина

Ложь

Истина

Истина

Ложь

Истина

Истина

В языке Basic логические константы представляются числами: ложь –нулевое значение, истина – ненулевое. Поэтому логические операции можно применять, если в выражениях участвуют произвольные целые числа.

Допустимы такие выражения, как

10 AND 3

22 OR –5

5 XOR 11

Участвующие в вычислениях числа представляются в двоичной форме записи и операции применяются поразрядно, т.е. к каждому биту. Необходимо учесть, что целые отрицательные числа представляются в компьютере в дополнительном коде. Значения результатов логических операций над числами представлены в таблице 6.3.

Табл.6.3. Значения результатов логических операций над числами.

Разряд А

Разряд В

NOT A

A AND

B

A OR

B

A XOR

B

A EQV

B

A IMP

B

0

0

1

0

0

0

1

1

0

1

1

0

1

1

0

1

1

0

0

0

1

1

0

0

1

1

0

1

1

0

1

1

Пример 1. Вычислить значение выражения 11 AND 3.

Решение. Переведем заданные числа в двоичную систему счисления и приведем к одной разрядной сетке, в нашем примере достаточно 4 разряда. Буква В означает, что значение является двоичной константой.

11 = 1011В 2 = 10В

Выполним поразрядно операцию AND:

1011

AND

0010

0010

Получили 11 AND 3. = 1011B AND 10B = 10B = 2

Пример 2. Вычислить значение 22 OR -5.

Решение. Переведем заданные числа в двоичную систему счисления. Отрицательное число –5 представим в дополнительном коде. Приведем числа к одной разрядной сетке, в нашем примере достаточно 6 разрядов.

22 = 010110В

-5 доп.код = 111011В

Чтобы получить дополнительный код числа -5 отбросим знак минус и вычтем из числа единицу, получим число 4. Переведем число 4 в двоичную систему счисления, 4 = 000100B. Заменим все единицы на нули, а нули на единицы, получим 111011В.

Выполним поразрядно операцию OR:

010110

OR

111011

111111

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

111111В = 000000В + 1В = 1В = -1

Получили 22 OR –5 = 010110 OR 111011 = 111111В = -1.

Упражнения.

1. Какое значение будет выведено следующим оператором языка Basic:

PRINT (NOT (15 OR 51) EQV 85) IMP (15 AND 51)

Решение.

Переведем заданные числа в двоичную систему счисления:

15 = 00001111В

51 = 00110011В

85 = 01010101В

Выполним операции в соответствии с приоритетами операций и скобками:

1) 15 OR 51 = 00001111В OR 00110011В = 00111111B

00001111

OR

00110011

00111111

2) NOT (15 OR 51) = NOT (00111111B) = 11000000B

3) NOT (15 OR 51) EQV 85 = 11000000B EQV 01010101В = 01101010B

11000000

EQV

01010101

01101010

4) 15 AND 51 = 00001111В AND 00110011В = 00000011B

00001111

AND

00110011

00000011

5) (NOT (15 OR 51) EQV 85) IMP (15 AND 51) = 01101010B IMP 00000011B =10010111B

01101010

IMP

00000011

10010111

Получили двоичное число 10010111В. Старший разряд числа равен единице, это означает, что получено отрицательное число в дополнительном коде. Переведем число в прямой код, для этого в числе 10010111 заменим нули на единицы, а единицы на нули, получим число 01101000, прибавим к нему единицу

01101000

+ 1

01101001

Переведем число 01101001В в десятичную систему счисления и припишем знак минус, получим число –105.

Ответ. Результатом работы заданного оператора

PRINT (NOT (15 OR 51) EQV 85) IMP (15 AND 51)

будет число –105.

2. Какое значение будет выведено следующим оператором языка Basic:

a) PRINT (12 IMP 45) XOR NOT ( 35 AND ( 12 EQV 45))

б) PRINT (11 EQV 25) XOR ( 24 AND NOT ( 15 IMP 14))

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]