Битовые операции Все числа хранятся в памяти компьютера в

advertisement
Áèòîâûå îïåðàöèè
Âñå ÷èñëà õðàíÿòñÿ â ïàìÿòè êîìïüþòåðà â äâîè÷íîé ñèñòåìå ñ÷èñëåíèÿ. Ïîýòîìó â áîëüøèíñòâå ÿçûêîâ ïðîãðàììèðîâàíèÿ èìåþòñÿ ñïåöèàëüíûå îïåðàöèè äëÿ öåëûõ ÷èñåë, ðàáîòàþùèå ñ èõ äâîè÷íûì ïðåäñòàâëåíèåì. Ýòè
îïåðàöèè íàçûâàþòñÿ ïîáèòîâûìè, ïîñêîëüêó ïðîèçâîäÿò îäíè è òå æå äåéñòâèÿ íàä âñåìè áèòàìè îïåðàíäîâ.
 ÿçûêå Pascal áèòîâûå îïåðàöèè, ñîîòâåòñòâóþùèå ëîãè÷åñêèì îïåðàöèÿì, íàçûâàþòñÿ òàêæå, êàê è ñîîòâåòñòâóþùèå ëîãè÷åñêèå îïåðàöèè. Êîìïèëÿòîð ïîíèìàåò, êàêàÿ îïåðàöèÿ (áèòîâàÿ èëè ëîãè÷åñêàÿ) èìååòñÿ â âèäó, ñìîòðÿ
ïî òîìó, ê êàêèì îïåðàíäàì îíà ïðèìåíÿåòñÿ. Åñëè ýòè îïåðàíäû èìåþò ëîãè÷åñêèé òèï boolean, òî è îïåðàöèÿ áóäåò
ëîãè÷åñêàÿ; åñëè æå îïåðàíäû öåëûå ÷èñëà, òî îïåðàöèÿ áóäåò áèòîâàÿ.
Íàïðèìåð, ïðîñòåéøàÿ áèòîâàÿ îïåðàöèÿ áèòîâîå îòðèöàíèå, îáîçíà÷àåòñÿ òàê æå, êàê è ëîãè÷åñêîå îòðèöàíèå,
not. Ñìûñë áèòîâîãî îòðèöàíèÿ â òîì, ÷òî ê êàæäîìó áèòó, ò. å. ê êàæäîé äâîè÷íîé öèôðå îïåðàíäà ïðèìåíÿåòñÿ
îïåðàöèÿ ëîãè÷åñêîãî îòðèöàíèÿ (0 ñ÷èòàåòñÿ çà ëîæü, 1 çà èñòèíó), ò. å. îáðàçóåòñÿ íîâîå ÷èñëî, êàæäàÿ äâîè÷íàÿ
öèôðà êîòîðîãî îïðåäåëÿåòñÿ ñëåäóþùèì ïðàâèëîì: åñëè äâîè÷íàÿ öèôðà â òîé æå ïîçèöèè ó èñõîäíîãî ÷èñëà áûëà
0, òî ó ðåçóëüòàòà áèòîâîãî îòðèöàíèÿ îíà áóäåò 1 è íàîáîðîò, åñëè áûëà 1, òî ó ðåçóëüòàòà áóäåò 0. Åñëè èñõîäíîå
÷èñëî â äâîè÷íîé ñèñòåìå çàïèñûâàëîñü êàê 0011010111, òî ðåçóëüòàò áèòîâîãî îòðèöàíèÿ áóäåò 1100101000.
Òàêæå èìåþòñÿ îïåðàöèè áèòîâîãî è (and) è èëè (or). Ñìûñë ýòèõ îïåðàöèé â òîì, ÷òî äâîè÷íàÿ öèôðà ðåçóëüòàòà â êàæäîé ïîçèöèè îïðåäåëÿåòñÿ êàê ðåçóëüòàò ñîîòâåòñòâóþùåé ëîãè÷åñêîé îïåðàöèè, ïðèìåíåííîé ê äâîè÷íûì
öèôðàì îïåðàíäîâ â òîé æå ïîçèöèè. Íàïðèìåð, 001100011110 and 111001111100 áóäåò 001000011100.
Êðîìå áèòîâûõ àíàëîãîâ ëîãè÷åñêèõ îïåðàöèé, èìåþòñÿ åùå äâå âåñüìà ïîëåçíûå îïåðàöèè, èìåþùèå äåëî ñ
áèòàìè. Ýòî îïåðàöèè áèòîâîãî ñäâèãà. Áèòîâûé ñäèã âëåâî îáîçíà÷àåòñÿ shl, âïðàâî shr. Êàæäàÿ èç ýòèõ îïåðàöèé
ïðèíèìàåò äâà îïåðàíäà öåëûõ ÷èñëà. Ëåâûé îïåðàíä òî ÷èñëî, êîòîðîå íàäî ñäâèãàòü, à ïðàâûé ÷èñëî
ïîçèöèé, íà êîòîðîå íóæíî ñäâèíóòü ëåâûé îïåðàíä. Ñìûñë ñäâèãîâ â òîì, ÷òîáû ïåðåìåñòèòü áèòû óêàçàííîãî ÷èñëà
íà îïðåäåëåííîå ÷èñëî ïîçèöèé â çàäàííóþ ñòîðîíó. Íàïðèìåð, 0000011000101111 shl 3 áóäåò 0011000101111000. Äëÿ
íå î÷åíü áîëüøèõ íåîòðèöàòåëüíûõ ÷èñåë ñäâèã âëåâî íà n ïîçèöèé ýòî ïðîñòî óìíîæåíèå ÷èñëà íà 2n . Àíàëîãè÷íî,
ñäâèã âïðàâî íåïîëíîå ÷àñòíîå îò äåëåíèÿ íà ñîîòâåòñòâóþùóþ ñòåïåíü äâîéêè.
Òàêæå, â ñâÿçè ñ áèòîâûìè îïåðàöèÿìè ïîëåçíî çíàòü ïðåäñòàâëåíèå îòðèöàòåëüíûõ ÷èñåë. Îòðèöàòåëüíûå ÷èñëà
ïðåäñòàâëÿþòñÿ ïðîñòî ïî ìîäóëþ ñîîòâåòñòâóþùåé ñòåïåíè äâîéêè (ïîêàçàòåëü êîòîðîé ðàâåí êîëè÷åñòâó îòâîäèìûõ
ïîä öåëîå ÷èñëî áèòîâ). Ïîýòîìó (äîêàæèòå!) äëÿ öåëîãî ÷èñëà x ñïðàâåäëèâà ôîðìóëà -x=1+not x, ãäå not ïîáèòîâîå
îòðèöàíèå. Òàê êàê ïîáèòîâîå îòðèöàíèå èíîãäà íàçûâàåòñÿ äîïîëíåíèåì äî åäèíèöû (êàæäîãî äâîè÷íîãî ðàçðÿäà),
òî òàêîå ïðåäñòàâëåíèå îòðèöàòåëüíûõ ÷èñåë íàçûâàåòñÿ äîïîëíåíèåì äî äâóõ.
Ïðèìåðû.
Ñíà÷àëà íàïèøåì âûðàæåíèå, äàþùåå ðåçóëüòàò 2n äëÿ öåëîé ïåðåìåííîé n. Îíî î÷åâèäíî: 1 shl n. Äàëåå íàïèøåì
âûðàæåíèå, äàþùåå çíà÷åíèå áèòà íà ïîçèöèè i â ÷èñëå n (ò. å. äâîè÷íóþ öèôðó ÷èñëà n, ñîîòâåòñòâóþùåå i-é ñòåïåíè
äâîéêè): (n and (1 shl i)) shr i. Äàëåå, íàïèøåì âûðàæåíèå, äàþùåå ÷èñëî, îòëè÷àþùååñÿ îò çàäàííîãî ÷èñëà n òîëüêî
òåì, ÷òî íà i-é ïîçèöèè ñòîèò ãàðàíòèðîâàííî íóëåâîé áèò (à åñëè â ÷èñëå n îí è òàê íóëåâîé, òî îòâåò ñîâïàäàåò ñ n):
n and not (1 shl i). Íàêîíåö, ïîñëåäíèé ïðèìåð óñòàíîâèòü i-é áèò ÷èñëà n â 1: n or (1 shl i).
Çàäà÷è.
1. Âûâåñòè äâîè÷íîå ïðåäñòàâëåíèå öåëîãî ïîëîæèòåëüíîãî ÷èñëà, èñïîëüçóÿ áèòîâûå îïåðàöèè: à) ñ âåäóùèìè
íóëÿìè; á) áåç íèõ.
2. Íàéòè êîëè÷åñòâî åäèíèö â äâîè÷íîì ïðåäñòàâëåíèè öåëîãî ïîëîæèòåëüíîãî ÷èñëà: à) ïðè ïîìîùè öèêëà, êîëè÷åñòâî èòåðàöèé êîòîðîãî ðàâíî ÷èñëó áèòîâ, îòâîäèìûõ ïîä öåëîå ÷èñëî; á)* ïðè ïîìîùè öèêëà, ÷èñëî èòåðàöèé
êîòîðîãî ðàâíî ÷èñëó åäèíè÷íûõ áèòîâ â ÷èñëå; â)* áåç öèêëîâ, ïðè ïîìîùè íåñêîëüêèõ ïîõîæèõ âûðàæåíèé, îòëè÷àþùèõñÿ òîëüêî âõîäÿùèìè â íèõ êîíñòàíòàìè, ñóììàðíàÿ äëèíà ýòèõ âûðàæåíèé ïðîïîðöèîíàëüíà äâîè÷íîìó
ëîãàðèôìó ÷èñëà áèòîâ, îòâîäèìûõ äëÿ õðàíåíèÿ öåëîãî ÷èñëà.
3. Íàéòè íîìåð ìëàäøåãî åäèíè÷íîãî áèòà â äâîè÷íîì ïðåäñòàâëåíèè öåëîãî ïîëîæèòåëüíîãî ÷èñëà (áèòû íóìåðóþòñÿ ñ 0 îò ìëàäøèõ ê ñòàðøèì).
4*. Íàïèñàòü âûðàæåíèå, çíà÷åíèåì êîòîðîãî áóäåò èñõîäíîå ÷èñëî n, â êîòîðîì ìëàäøèé åäèíè÷íûé áèò (íå
âàæíî, êàêîé ñòåïåíè äâîéêè îí ñîîòâåòñòâîâàë) îáíóëÿåòñÿ.
5. Íàïèñàòü âûðàæåíèå, ðåçóëüòàòîì êîòîðîãî ÿâëÿåòñÿ ÷èñëî, â äâîè÷íîì ïðåäñòàâëåíèè êîòîðîãî åäèíèöàìè
áóäóò áèòû íà÷èíàÿ ñ i-ãî è äî j -ãî (ìîæíî ïðåäïîëàãàòü, ÷òî i ≤ j ).
6. Âû÷åðêíóòü i-é áèò èç äâîè÷íîãî ïðåäñòàâëåíèÿ öåëîãî ïîëîæèòåëüíîãî ÷èñëà (ìëàäøèå i-ãî áèòû îñòàþòñÿ
íà ìåñòå, ñòàðøèå ñäâèãàþòñÿ íà îäèí ðàçðÿä âïðàâî).
7. Ïîìåíÿòü ìåñòàìè äâà áèòà ñ çàäàííûìè íîìåðàìè â äâîè÷íîì ïðåäñòàâëåíèè öåëîãî ïîëîæèòåëüíîãî ÷èñëà.
8. Îïðåäåëèòü, ñêîëüêî ðàç âñòðå÷àåòñÿ ¾11¿ â äâîè÷íîì ïðåäñòàâëåíèè öåëîãî ïîëîæèòåëüíîãî ÷èñëà (â äâîè÷íîì
ïðåäñòàâëåíèè 11110111 îíî âñòðå÷àåòñÿ 5 ðàç).
9. Íàïèñàòü ïðîãðàììó, ââîäÿùóþ ñ êëàâèàòóðû öåëîå ÷èñëî è âûâîäÿùóþ äðóãîå, êàæäàÿ äâîè÷íàÿ öèôðà
êîòîðîãî ïîëó÷åíà â ðåçóëüòàòå ñóììû ïî ìîäóëþ 2 äâîè÷íûõ öèôð èñõîäíîãî ÷èñëà â äàííîé, à òàêæå ñîñåäíèõ
ñïðàâà è ñëåâà ïîçèöèÿõ (áåç öèêëîâ!).
10. Ïîëüçîâàòåëü çàãàäûâàåò ÷èñëî, è ñòðîèò ïî íåìó òðè äðóãèõ ÷èñëà ñ òåì óñëîâèåì, ÷òî â êàæäîì êîíêðåòíîì
äâîè÷íîì ðàçðÿäå çàãàäàííîå ÷èñëî îòëè÷àåòñÿ íå áîëåå, ÷åì îò îäíîãî èç ïîñòðîåííûõ, ò. å. äëÿ ëþáîé ïîçèöèè
äâîè÷íàÿ öèôðà çàãàäàííîãî ÷èñëà â äàííîé ïîçèöèè ñîâïàäàåò ñ òîé, êîòîðàÿ â äàííîé ïîçèöèè ñòîèò ïî êðàéíåé
ìåðå ó äâóõ èç ïîñòðîåííûõ ÷èñåë. Íàïðèìåð, åñëè ïîñòðîåíû ÷èñëà (â äâîè÷íîé ñèñòåìå) 1001001, 1100101, 0000100,
òî çàãàäàíî ÷èñëî 1000101. Íàïèñàòü ïðîãðàììó, ââîäÿùóþ ñ êëàâèàòóðû òðè ïîñòðîåííûõ öåëûõ ÷èñëà è âûâîäÿùóþ
çàãàäàííîå ÷èñëî (áåç öèêëîâ!).
11. Ââåñòè öåëîå ÷èñëî è âûâåñòè äðóãîå, ïîëó÷åííîå èç ââåäåííîãî èçìåíåíèåì áèòîâ ñ ÷åòíûìè íîìåðàìè íà
ïðîòèâîïîëîæíûå, ò. å. ê íóëåâîìó (ìëàäøåìó) áèòó, âòîðîìó (ñîîòâåòñòâóþùåìó 22 ), ÷åòâåðòîìó è ò. ä. áèòàì ïðèìåíÿåòñÿ îïåðàöèÿ îòðèöàíèÿ, à ïåðâûé (ñîîòâåòñòâóþùèé 21 ), òðåòèé è ò. ä. áèòû îñòàþòñÿ, êàê áûëè. Áåç öèêëîâ!
12. Ââåñòè ñ êëàâèàòóðû öåëîå ÷èñëî è âûâåñòè íîâîå ÷èñëî, ïîëó÷åííîå èç ââåäåííîãî âû÷åðêèâàíèåì âñåõ
äâîè÷íûõ öèôð ñ ÷åòíûìè íîìåðàìè (íóëåâîé, âòîðîé, ÷åòâåðòîé è ò. ä.). Íàïðèìåð, åñëè äâîè÷íîå ïðåäñòàâëåíèå
ââåäåííîãî ÷èñëà áûëî 1100101001, òî äâîè÷íîå ïðåäñòàâëåíèå ðåçóëüòàòà äîëæíî áûòü 10110.
13. Íàïèñàòü âûðàæåíèå, ðåàëèçóþùåå öèêëè÷åñêèé ñäâèã ÷èñëà âëåâî íà çàäàííîå êîëè÷åñòâî ïîçèöèé (â îòëè÷èå
îò îáû÷íûõ ñäâèãîâ, ðåàëèçîâàííûõ îïåðàöèÿìè shl è shr, ïðè öèêëè÷åñêîì ñäâèãå òå áèòû, êîòîðûå âûëåçàþò çà êðàé
ðàçðÿäíîé ñåòêè, ïåðåìåùàþòñÿ â äðóãîé êîíåö ÷èñëà è ïîÿâëÿþòñÿ íà îñâîáîæäàþùèõñÿ ïðè ñäâèãå ìåñòàõ).
14. Ââåñòè ÷èñëî è ïîìåíÿòü ó íåãî ìåñòàìè áèòû ñ íîìåðàìè 3i + 1 è 3i + 2 ïðè i = 0, 1, . . . , 9. Áåç öèêëîâ!
15*. Íàïèñàòü ïðîãðàììó, ââîäÿùóþ ñ êëàâèàòóðû öåëîå ÷èñëî è âûâîäÿùóþ ñëåäóþùåå ïî ïîðÿäêó ÷èñëî, â
äâîè÷íîì ïðåäñòàâëåíèè êîòîðîãî ñòîëüêî æå åäèíèö, ñêîëüêî èõ áûëî âî ââåäåííîì ÷èñëå (áåç öèêëîâ!).
Download