Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курс лекцый для 1 курса-1 семестр.doc
Скачиваний:
3
Добавлен:
09.11.2019
Размер:
2.95 Mб
Скачать

Бітавая арыфметыка

Бітавая, або паразрадная, арыфметыка добра развіта ў мове Pascal. Не­аб­ход­насць у ёй узнікае, калі трэба працаваць не з дзесятковымі зна­чэн­ня­мі лікаў, а з іх двайковым уяўленнем. Бітавыя аперацыі дазваляюць па­раў­ноў­ваць асобныя біты двух лікаў, вылучаць асобныя фрагменты ў лі­ку, замяняць іх.

Бітавыя аперацыі над сапраўднымі лікамі не прымяняюцца. Яны пры­мя­ня­юц­ца толькі над цэлымі тыпамі – Byte, Shortint, Word, Integer, Longint.

Агульная формула для значэнняў даных бяззнакавых тыпаў Byte (1 байт) і Word (2 байты) мае наступны выгляд:

Byte: значэнне ;

Word: значэнне .

Значэнні разрадаў , , ..., роўныя або 0, або 1, адпаведна мно­жац­ца на вагу разраду. Адсюль атрымліваем дыяпазон уяўлення:

Byte:

Word:

Унутранае адрозненне маюць уяўленні цэлых тыпаў са знакамі Shor­tint, Integer, Longint. Самы левы біт адводзіцца пад знак, для адмоўнага ліку ён роўны 1, для дадатнага – 0.

Можна запомніць формулу перакладу з 2-й с/зл у іншую сістэму злі­чэн­ня для ты­паў Shortint (1 байт), Integer (2 байты), Longint (4 байты):

Shortint: значэнне ;

Integer: значэнне ;

Longint: значэнне .

Адсюль дыяпазон уяўлення лікаў:

а) дадатныя Integer (2 байты):

б) адмоўныя Integer (2 байты) (найменшае атрымаем, калі нічога не будзем дадаваць):

в) дадатныя Shortint (1 байт):

г) адмоўныя Shortint (1 байт):

Дзеянні бітавай арыфметыкі

Першая група паразраднай арыфметыкі – гэта лагічныя аперацыі над бі­та­мі.

Аперацыі

Назва

Форма запісу

Прыярытэт

Тып

NOT

Паразраднае адмаўленне

NOT A

1 (вышэйшы)

Унарны

AND

Лагічнае множанне (і)

A1 AND A2

2

Бінарны

OR

Лагічнае складанне (ці)

A1 OR A2

3

XOR

Якая выключае «ці»

A1 XOR A2

4 (ніжэйшы)

NOT – паразраднае адмаўленне – «пераварочвае» значэнне кожнага біта на процілеглае.

Прыклад. Няхай A = 01101100. Тады NOT A = 10010011.

AND, OR, XOR – лагічныя аперацыі, выконваюцца паразрадна ў ад­па­вед­нас­ці з наступнай табліцай тоеснасці.

A

B

A AND B

A OR B

A XOR B

A XOR B XOR B

0

0

0

0

0

0

0

1

0

1

1

0

1

0

0

1

1

1

1

1

1

1

0

1

Прыклад. Няхай , і X, Y – пераменныя тыпу Shortint. Пакажам, што .

Рашэнне:

Заўвага. Аперацыя AND у 99 % выпадкаў патрэбна для дзвюх мэт: 1) праверыць наяўнасць канкрэтных бітаў ці 2) зануліць некаторыя з іх.

Калі выконваецца ўмова (X and 32) = 32, тады ў пятым біце пераменнай Х ёсць адзінка (адзінка ў пятым біце дае лік 25 = 32).

Можна праверыць наяўнасць адразу некалькіх уключаных бітаў, на­прык­лад пятага, другога і нулявога. Атрымаем лік 25 + 22 + 20 = 37. Калі (X and 37) = 37, то так яно і ёсць.

Калі трэба зануліць (выключыць) нейкі біт у пераменнай, тады трэба пад­рых­та­ваць лік, у якім гэты біт нулявы:

– выключылі трэці біт, бо 8 = 23;

– выключылі трэці і сёмы біты, бо 23 = 8, 27 = 128.

Лагічнае складанне OR з поспехам выкарыстоўваецца пры ўстаноўцы ў зна­чэн­не 1 (уключэнні) асобных бітаў двайковага ўяўлення цэлых лі­каў: – уключылі чацвёрты, першы і нулявы біты, бо 2= 16, 2= 2, 2= 1.

XOR, якое выключае «ці» (або параўнанне па модулі 2), зварочвае 0, ка­лі абодва аргументы роўныя, і 1 – калі не.

Наступная група паразрадных аперацый – цыклічныя зрухі.

Аперацыя

Назва

Форма запісу

shl

Цыклічны зрух на N пазіцый улева (l)

A shl N

shr

Цыклічны зрух на N пазіцый управа (r)

A shr N

Прыярытэт аперацый – як у .

Сутнасць аперацый і аднолькавая: яны зрушваюць двай­ко­вую паслядоўнасць значэння A на N бітаў адпаведна ўлева або ўправа. Пры гэтым біты, якія знікаюць за краем разраднасці, губляюцца, а раз­ра­ды, якія вызваліліся, запаўняюцца нулямі. Рэалізацыя аперацый і  за­ле­жыць ад кампілятара.

паколькі ;

паколькі

У даных тыпу Byte, Shortint зрушваецца поле з 8 бітаў; тыпу Word, Integer – 16 бітаў; Longint – 32 біты. Браць N больш за гэтыя ве­лі­чы­ні або адмоўным бяссэнсава – вынікам будзе 0.

Аперацыя можа замяняць множанне гэтых лікаў на ступені двой­кі, пры гэтым не ўзнікае «перапаўнення», але можам атрымаць дрэнны вы­нік – прападзе старэйшы біт. Напрыклад: shl 3 = j*8, а shr – цэлалікавае дзяленне на ступені двойкі; shl 1 = [j/2],