Главная » Basic » МАНИПУЛИРОВАНИЕ БИТАМИ

0

Логические операции действуют  точно таким же образом, как и операции отношения;  при этом программа явным образом пользуется значениями ИСТИНА и ЛОЖЬ. Приведенный ниже фрагмент программы иллюстрирует такое употребление этих значений для мини-ЭВМ, в которой ИСТИНА представлено значением 1 (микроЭВМ может действовать иначе, см. ниже) :

10   REM ДЕМОНСТРАЦИЯ ДЕЙСТВИЯ ЛОГИЧЕСКИХ ОПЕРАЦИЙ

15   REM (НЕ ДЛЯ МИКРО-ЭВМ)

20   INPUT "ВВЕДИТЕ А,В";А,В

30   PRINT "NOT А РАВНО" ; (NOT(A) )

40   PRINT "NOT В РАВНО";(NOT(B))

50   PRINT "A AND В =";((A)AND(B))

60   PRINT "A OR В =" ;( (A)OR(B))

70   STOP

80   END

RUN

ВВЕДИТЕ А,В

?4.0

NOT А РАВНО 0

NOT В РАВНО 1

A AND В=0

A OR В = 1

END AT LINE 80

RUN

ВВЕДИТЕ A,B

?12.13

NOT А РАВНО 0

NOT В РАВНО 0

A AND В = 1

A OR В = 1

END AT LINE 80

RUN

ВВЕДИТЕ A, В

?-67.90

NOT А РАВНО 0

NOT В РАВНО 0

A AND В = 1

A OR В = 1

END AT LINE 80

Результаты исполнения этой программы согласуются с принятым в Бейсике общим соглашением, что ЛОЖЬ представляется нулевым значением, а ИСТИНА ненулевым. В данном случае, в системе ICL 2904,  результаты  выполнения операции производились    из   принятого в   этой  системе выбора представления ИСТИНЫ (в нашем случае +1), а не из произвольного  ненулевого  значения (см. табл. 6.1) . Допустима запись

IF (В) THEN 500

где В содержит значение, которое может быть интерпретировано  как ИСТИНА или  ЛОЖЬ. Но остерегайтесь беспорядочного применения этой конструкции, так как оператор

IF (A) OR(B>C) THEN 500

означает вовсе не то, что можно себе представить, читая его как предложение на английском языке. Результаты  применения  логических  операций к  произвольным  значениям у  многих микроЭВМ несколько различаются. Учтите, однако, что если значениям ЛОЖЬ и ИСТИНА соответствуют 0 и -1 (или +1 в некоторых системах) , то результатами  применения логических операций должны быть эти же числа. Если в качестве операндов задать произвольные значения, то логические операции будут действовать  побитовым  образом. Иначе говоря, они возьмут соответствующие  биты каждого из операндов и  выполнят над ними требуемую операцию, что даст один бит результата. Стандартная таблица фактически дублирует  те, что были приведены ранее, но показывает поведение отдельных битов (только 0 или 1) при выполнении над ними логических  операций:

Бит а

Бит b

Бит а

AND

бит b

Бит а

OR

бит b

Бит а

XOR

бит b

Бит а

IMP

бит b

Бит а

EQV

бит b

0

0

0

0

0

1

1

Прежде чем  выполнять операции  над  битами,  большинство   систем для  микроЭВМ преобразует

операнды  в    16-битовые целые  числа в    диапазоне —32  768  …  +32  767,  представляемые  в дополнительном коде (в виде дополнения до двух) . Если хотя бы один из операндов  лежит вне этого диапазона, то фиксируется ошибка.

Следовательно, исполнение предыдущей  программы  на  большинстве микроЭВМ  приведет к следующим результатам:

10 REM ДЕМОНСТРАЦИЯ ДЕЙСТВИЯ ЛОГИЧЕСКИХ ОПЕРАЦИЙ

15 REM (ДЛЯ МИКРО-ЭВМ)

20 INPUT "ВВЕДИТЕ А,В";А,В

30 PRINT "NOT А РАВНО";(NOT(A))

40 PRINT "NOT В РАВНО";(NOT(B))

50 PRINT "A AND В=";((A)AND(B))

60 PRINT "A OR В =";((A)OR(B))

70 END RUN

ВВЕДИТЕ А.В?63.16

NOT А РАВНО -64

NOT В РАВНО -17

A AND В = 16

A OR В=63

END AT LINE 70

RUN

ВВЕДИТЕ А.В?-1.6

NOT А РАВНО 0

NOT В РАВНО -9

A AND В = 8

A OR В = -1

END AT LINE 70

RUN

ВВЕДИТЕ А.В?-1.-2

NOT А РАВНО 0

NOT В РАВНО 1

A AND В = -2

A OR В = -1

END AT LINE 70

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

Например,

63  равно

—64  равно

0000

0000

0011

111

1

1111

1111

1100

000

0

16  равно

0000

0000

0001

000

0

-17

равно

1111

1111

1110

111

1

-1

равно

1111

1111

1111

111

1

0

равен

0000

0000

0000

000

0

8

равно

0000

0000

0000

100

0

-9

равно

1111

1111

1111

011

1

-2

равно

1111

1111

1111

111

1                 равно 0000  0000  0000  000

Двоичные представления  всех этих чисел даны в  16-битовом дополнительном  коде. Для удобства чтения  биты  сгруппированы по   четыре.  Логическими   операциями можно   пользоваться  для образования   или "маскировки"  определенных битов   в  байте,  которым можно манипулировать  в программе на Бейсике с помощью операторов РЕЕК (вытащить) и  РОКЕ (поместить). Кроме того, эти операции  могут понадобиться  при исполнении операций  ввода-вывода, например  для проверки значений  различных  битов байта состояния, описывающего действие дискового контроллера.

Источник: Уолш Б.    Программирование на Бейсике: Пер. с англ. М.: Радио и связь, 1988. 336 с: ил.

По теме:

  • Комментарии