Operator bitowy: Różnice pomiędzy wersjami

Z Wikipedii, wolnej encyklopedii
[wersja przejrzana][wersja przejrzana]
Usunięta treść Dodana treść
HiW-Bot (dyskusja | edycje)
m r2.7.2) (Robot dodaje cs, de, en, eo, es, fr, ja, ko, lv, pt, ru, simple, vi, zh
Joee (dyskusja | edycje)
drobne merytoryczne
Linia 143: Linia 143:
| {{nie}}
| {{nie}}
|-
|-
| [[PL/I]]<ref name="pl1jb"/>
| [[PL/I]]<ref name="pl1jb"/><ref name="pl1a"/>
| <code>¬</code>
| <code>¬</code>
| <code>&</code>
| <code>&</code>
Linia 200: Linia 200:
{{Przypisy|2|przypisy=
{{Przypisy|2|przypisy=
<!-- Abap --><ref name="abap">{{cytuj stronę| url = http://help.sap.com/saphelp_nw2004s/helpdata/en/ce/b518b6513611d194a50000e8353423/frameset.htm | tytuł = Bit Operations | data dostępu = 2011-09-08| opublikowany = help.sap.com – SAP Library | praca = ABAP Programming (BC-ABA) |język = en}}</ref>
<!-- Abap --><ref name="abap">{{cytuj stronę| url = http://help.sap.com/saphelp_nw2004s/helpdata/en/ce/b518b6513611d194a50000e8353423/frameset.htm | tytuł = Bit Operations | data dostępu = 2011-09-08| opublikowany = help.sap.com – SAP Library | praca = ABAP Programming (BC-ABA) |język = en}}</ref>
<!-- Ada --><ref name="ada95">{{cytuj książkę |autor =Michał Morawski |autor2 = Antoni M. Zajaczkowski |autor link = | tytuł =Wstep do programowania w jezyku Ada’95 | miejsce =Łódz | rok =2004 | wydanie=drugie| strony =41–45 | isbn =| url=http://www.zsk.p.lodz.pl/~zajaczko/Podstawy_Informatyki_Ada_95/Ada_95_Skrypt_Wyd_II.pdf | data dostępu =2011-01-29 | język = pl}}</ref>
<!-- Ada --><ref name="ada95">{{cytuj książkę |autor =Michał Morawski |autor2 = Antoni M. Zajaczkowski |autor link = | tytuł =Wstep do programowania w jezyku Ada’95 | miejsce =Łódz | rok =2004 | wydanie=drugie| strony = | isbn =| url=http://www.zsk.p.lodz.pl/~zajaczko/Podstawy_Informatyki_Ada_95/Ada_95_Skrypt_Wyd_II.pdf | data dostępu =2011-01-29 | język = pl}}</ref>
<!-- C --><ref name="tc-jb">{{cytuj książkę |autor =Jan Bielecki |autor2 = |autor link =Jan Bielecki | tytuł =Turbo C z grafiką na IBM PC | wydawca = Wydawnictwa Naukowo-Techniczne | miejsce =Warszawa | rok =1990| seria =[[Mikrokomputery]] | strony =54, 65–66 | isbn =83-204-1101-7 | język = pl}}</ref><ref name="ec-jb">{{cytuj książkę |autor =Jan Bielecki |autor2 = |autor link =Jan Bielecki | tytuł =Encyklopedia języka C dla IBM PC | wydawca = Wydawnictwa Komunikacji i Łączności | miejsce =Warszawa | rok =1989| tom =I | tytuł tomu =Opis języka | strony =98–99 | isbn =83-206-0919-4 | język = pl}}</ref>
<!-- C --><ref name="tc-jb">{{cytuj książkę |autor =Jan Bielecki |autor2 = |autor link =Jan Bielecki | tytuł =Turbo C z grafiką na IBM PC | wydawca = Wydawnictwa Naukowo-Techniczne | miejsce =Warszawa | rok =1990| seria =[[Mikrokomputery]] | strony = | isbn =83-204-1101-7 | język = pl}}</ref><ref name="ec-jb">{{cytuj książkę |autor =Jan Bielecki |autor2 = |autor link =Jan Bielecki | tytuł =Encyklopedia języka C dla IBM PC | wydawca = Wydawnictwa Komunikacji i Łączności | miejsce =Warszawa | rok =1989| tom =I | tytuł tomu =Opis języka | strony = | isbn =83-206-0919-4 | język = pl}}</ref>
<!-- C, C++ --><ref name="cpp-jb">{{cytuj książkę |autor =Jan Bielecki |autor2 = |autor link =Jan Bielecki | tytuł =Od C do C++, programowanie obiektowe w języku C | wydawca = Wydawnictwa Naukowo-Techniczne | miejsce =Warszawa | rok =1990| strony =60–61,69–70 | isbn =83-204-1332-X | język = pl}}</ref>
<!-- C, C++ --><ref name="cpp-jb">{{cytuj książkę |autor =Jan Bielecki |autor2 = |autor link =Jan Bielecki | tytuł =Od C do C++, programowanie obiektowe w języku C | wydawca = Wydawnictwa Naukowo-Techniczne | miejsce =Warszawa | rok =1990| strony = | isbn =83-204-1332-X | język = pl}}</ref>
<!-- Java --><ref name="java-kj">{{cytuj stronę| url = http://www.webdeveloper.pl/manual_java/ | tytuł = Kurs Java. Opis języka, składni. Polski podręcznik. | data dostępu = 2011-09-08| autor =Artur Tyloch | opublikowany = www.webdeveloper.pl | język = pl}}</ref>
<!-- Java --><ref name="java-kj">{{cytuj stronę| url = http://www.webdeveloper.pl/manual_java/ | tytuł = Kurs Java. Opis języka, składni. Polski podręcznik. | data dostępu = 2011-09-08| autor =Artur Tyloch | opublikowany = www.webdeveloper.pl | język = pl}}</ref>
<!-- Modula-2 --><ref name="modula2">{{cytuj książkę |autor =Niklaus Wirth |autor2 =| autor3= |autor link =Niklaus Wirth | tytuł =Modula 2 | wydawca = Wydawnictwa Naukowo-Techniczne| miejsce =Warszawa | rok =1987| seria =[[Biblioteka Inżynierii Oprogramowania]] | strony = 23–24, 40–42 | id=ISSN 0867-6011 | isbn =83-204-0828-8 | język = pl}}</ref>
<!-- Modula-2 --><ref name="modula2">{{cytuj książkę |autor =Niklaus Wirth |autor2 =| autor3= |autor link =Niklaus Wirth | tytuł =Modula 2 | wydawca = Wydawnictwa Naukowo-Techniczne| miejsce =Warszawa | rok =1987| seria =[[Biblioteka Inżynierii Oprogramowania]] | strony = | id=ISSN 0867-6011 | isbn =83-204-0828-8 | język = pl}}</ref>
<!-- Pascal --><ref name="bp">{{cytuj książkę |autor =Andrzej Marciniak |autor2 =| autor3= |autor link =Andrzej Marciniak (matematyk) | tytuł =Borland Pascal 7.0 | wydawca = Nakom | miejsce =Poznań | rok =1994 | seria =[[Biblioteka Użytkownika Mikrokomputerów]] | strony = 370, 380–385 | id=ISSN 0867-6011 | isbn =83-85060-53-7 | język = pl}}</ref>
<!-- Pascal --><ref name="bp">{{cytuj książkę |autor =Andrzej Marciniak |autor2 =| autor3= |autor link =Andrzej Marciniak (matematyk) | tytuł =Borland Pascal 7.0 | wydawca = Nakom | miejsce =Poznań | rok =1994 | seria =[[Biblioteka Użytkownika Mikrokomputerów]] | strony = | id=ISSN 0867-6011 | isbn =83-85060-53-7 | język = pl}}</ref>
<!-- PL/I --><ref name="pl1jb">{{cytuj książkę |autor =Jan Bielecki |autor2 = |autor link =Jan Bielecki | tytuł =Rozszerzony PL/I i JCL w systemie OS/RIAD | wydawca = Państwowe Wydawnictwo Naukowe | miejsce =Warszawa | rok =1986 | seria =Biblioteka Informatyki | strony =100–101 | isbn =83-01-06146-4 | język = pl}}</ref>
<!-- PL/I --><ref name="pl1jb">{{cytuj książkę |autor =Jan Bielecki |autor2 = |autor link =Jan Bielecki | tytuł =Rozszerzony PL/I i JCL w systemie OS/RIAD | wydawca = Państwowe Wydawnictwo Naukowe | miejsce =Warszawa | rok =1986 | seria =Biblioteka Informatyki | strony = | isbn =83-01-06146-4 | język = pl}}</ref><ref name="pl1a">{{cytuj książkę |autor =M. I. Auguston i inni |autor2 = |autor link = | tytuł =Programowanie w języku PL/1 OS JS | wydawca = Państwowe Wydawnictwo Naukowe | miejsce =Warszawa | rok =1988 | seria = | strony = | isbn =83-01-07463-9 | język = pl}}</ref>
<!-- python --><ref name="phyton-lr">{{cytuj stronę| url = http://docs.python.org/reference/index.html | tytuł = The Python Language Reference 2.7 | data dostępu = 2011-09-27| opublikowany = docs.python.org | data =August 04, 2011 | język = en}}</ref>
<!-- python --><ref name="phyton-lr">{{cytuj stronę| url = http://docs.python.org/reference/index.html | tytuł = The Python Language Reference 2.7 | data dostępu = 2011-09-27| opublikowany = docs.python.org | data =August 04, 2011 | język = en}}</ref>
<!-- REXX --><ref name="rexx">{{cytuj stronę| url = http://killbox.pl/work/rexx/rexx-doc/language.htm | tytuł = The REXX language | data dostępu = 2011-09-08| autor = | opublikowany = killbox.pl | język = en}}</ref><ref name="orexx">{{cytuj stronę| url = http://www.oorexx.org/docs/rexxref/x974.htm | tytuł = Open Object Rexx™: Reference | data dostępu = 2011-09-08| autor = | opublikowany = www.oorexx.org |język = en}}</ref>
<!-- REXX --><ref name="rexx">{{cytuj stronę| url = http://killbox.pl/work/rexx/rexx-doc/language.htm | tytuł = The REXX language | data dostępu = 2011-09-08| autor = | opublikowany = killbox.pl | język = en}}</ref><ref name="orexx">{{cytuj stronę| url = http://www.oorexx.org/docs/rexxref/x974.htm | tytuł = Open Object Rexx™: Reference | data dostępu = 2011-09-08| autor = | opublikowany = www.oorexx.org |język = en}}</ref>

Wersja z 07:29, 28 wrz 2011

Operator bitowy w programowaniuoperator dostępny w określonym języku programowania (a także w innych językach komputerowych), który działając na zapodanych argumentach realizuje podstawowe operacje algebry Boole'a na pojedynczych bitach lub każdej parze odpowiadających sobie bitów pobieranych z tych samych pozycji dwóch argumentów operatora, oraz operacje przesunięć lub obrotów bitowych.

To jakie operatory bitowe są dostępne w konkretnym języku programowania zależy od jego składni, a to jakie są zasady ich stosowania, w tym priorytet tych operatorów i kolejność opracowywania argumentów, od przyjętej przez autorów języka lub implementacji konwencji. Zróżnicowany jest również sposób zapisu operatorów bitowych w poszczególnych językach: stosuje się zapis, bądź w postaci słów kluczowych, bądź symboli (znaku lub znaków nie będących literami). Stosowane są operatory bitowe jednoargumentowe – operator negacji, oraz dwuargumentowe – np. suma logiczna, iloczyn logiczny i inne.

Dostępne operatory bitowe

Operatory bitowe udostępnione w językach komputerowych realizują następujące operacje bitowe:

Zapis operatorów bitowych

Jak wyżej zaznaczono zapis w kodzie źródłowym operatorów bitowych zależne jest od przyjętej w składni danego języka sposobu reprezentacji znakowej operatorów, przy czym stosowane są zasadniczo dwa rozwiązania:

  • zapis za pomocą słów kluczowych, odpowiadających nazwom operacji przez nie wykonywanych, np. and, or, xor, itp., takie rozwiązanie dostępne jest m.in. w języku Pascal[1], Visual Basic[2][3] i innych,
  • zapis za pomocą symboli składających się ze znaku lub znaków innych niż litery, np. &, |, itp. takie rozwiązanie dostępne jest m.in. w języku C[4][5][6], C++[6] i innych.

W językach programowania oprócz operatorów bitowych występują także i inne, w tym operatory logiczne, realizujące odpowiednie operacje logiczne na argumentach reprezentujących wartości logiczne: prawdy i fałszu. W pewnych językach, np. C[4][5][6], C++[6], zapis tych operatorów jest różny, np. dla iloczynu logicznego jest to symbol: &&, natomiast dla iloczynu bitowego jest to symbol: &. W innych językach stosowany jest jednolity zapis tych operatorów, a to czy realizowana jest operacja bitowa czy logiczna zależne jest od typu argumentów, tak jest m.in. w języku Pascal[1], np. iloczyn bitowy oraz iloczyn logiczny realizowany jest za pomocą operatora reprezentowanego przez słowo kluczowe: and, co stanowi tzw. przeciążanie operatorów.

Stosowanie operatorów bitowych

Operatory bitowe stosuje się w wyrażeniach, tak jak pozostałe operatory. Za pomocą operatorów bitowych można realizować niektóre obliczenia w sposób bardziej efektywny, szczególnie tam, gdzie optymalizacja wydajności kodu ma istotne znaczenie. Innym zastosowaniem operatorów bitowych jest badanie wybranej flagi (bitu) umieszczonej w rejestrze stanu (lub innych strukturach bitowych, takich jak np. wartości bitowego typu danych, zbiorowego typu danych lub wartości typu wyliczeniowego). Do badania takich flag stosuje się odpowiednie maski bitowe jako drugi argument wybranej operacji bitowej.

Przykłady
język programowania ustawienie i badanie stanu określonej flagi
C[4][5][6]
# define MASKA_BIT_2=0H02;
main()
 {
   unsigned short bits;
   /* instrukcje */
   bits|=MASKA_BIT_2; /* ustawienie flagi - bit 2 */
   /* instrukcje */
   if (bits & MASKA_BIT_2) { /* badanie flagi - bit 2 */
   /* instrukcje wykonywane, gdy
      flaga - bit 2 - ustawiona */ }
 }
Pascal[1]
const MASKA_BIT_2=$02;
var Bits : Byte;
begin
  { instrukcje }
  Bits:=Bits or MASKA_BIT_2; { ustawienie flagi - bit 2 }
  { instrukcje }
  if (Bits and MASKA_BIT_2)=MASKA_BIT_2 then { badanie flagi - bit 2 }
   begin
     { instrukcje wykonywane, gdy
       flaga - bit 2 - ustawiona }
   end
end.

Implementacja operatorów bitowych

Zagadnienie implementacji operatorów bitowych w językach komputerowych wiąże się jak wyżej zaznaczono z ustaleniem reguł ich stosowania obejmujących miedzy innymi ich priorytet, łączność, zasady opracowywania argumentów, typy danych, które mogą być używane w operacjach bitowych i inne aspekty.

Z priorytetem operatorów bitowych wiąże się zagadnienie kolejności wykonywania obliczeń w wyrażeniach, co ma szczególne znaczenie przy budowaniu złożonych wyrażeń. Jeżeli priorytet operatorów bitowych jest wyższy niż innych operatorów, wykonywane są przed nimi. Oznacza to, że w tym przypadku, aby prawidłowo zbudować wyrażenie składające się z operacji arytmetycznych połączonych operatorem bitowych, niezbędne jest ujęcie poszczególnych operacji arytmetycznych łączonych operatorami bitowymi w nawiasy wymuszającymi określoną kolejność operacji. Ważne jest również ułożenie w hierarchii priorytetów operatorów operacji bitowych względem operatorów relacji przy budowaniu warunków badających stan określonej flagi w rejestrze flag realizowanych np. za pomocą określonej zmiennej typu całkowitoliczbowego. W przypadku wyższego priorytetu operatorów bitowych warunek z użyciem operatora porównania zostanie prawidłowo zrealizowany po operacji bitowej, w przeciwnym razie niezbędne jest ujęcie wyrażenia bitowego w nawiasach.

Operatory bitowe w językach programowania

Poniższe zestawienie zawiera dostępne operatory bitowe w wybranych językach komputerowych.

Operatory bitowe w językach komputerowych
język komputerowy jednoargumentowe dwuargumentowe
negacja koniunkcja alternatywa alternatywa wykluczająca przesunięcie bitowe inne
w prawo w lewo
ABAP[7] BIT-NOT BIT-AND BIT-OR BIT-XOR N N N
Ada[8] N N N N N N N
C[4][5][6], C++[6] ! & | ^ >> << N
Java[9] ! & | ^ >> << >>>
Modula-2[10] NOT AND OR N N N INCL, EXCL
Pascal[1] not and or xor shr shl N
PL/I[11][12] ¬ & | N N N ||
Python[13] N & | ^ >> << N
REXX[14][15] N N N N N N N
Visual Basic[2][3][16] Not And Or Xor >> << Imp, Eqv
Visual Basic for Applications[17] Not And Or Xor N N Imp, Eqv
VHDL[18] not and or xor slr sll nand, nxor, nor
sla, sra, rol, ror
  1. a b c d Andrzej Marciniak: Borland Pascal 7.0. Poznań: Nakom, 1994, seria: Biblioteka Użytkownika Mikrokomputerów. ISSN 0867-6011. ISBN 83-85060-53-7. (pol.).
  2. a b Logical/Bitwise Operators (Visual Basic). msdn.microsoft.com. [dostęp 2011-09-08]. (ang.).
  3. a b Logical and Bitwise Operators in Visual Basic. msdn.microsoft.com. [dostęp 2011-09-08]. (ang.).
  4. a b c d Jan Bielecki: Turbo C z grafiką na IBM PC. Warszawa: Wydawnictwa Naukowo-Techniczne, 1990, seria: Mikrokomputery. ISBN 83-204-1101-7. (pol.).
  5. a b c d Jan Bielecki: Encyklopedia języka C dla IBM PC. T. I: Opis języka. Warszawa: Wydawnictwa Komunikacji i Łączności, 1989. ISBN 83-206-0919-4. (pol.).
  6. a b c d e f g Jan Bielecki: Od C do C++, programowanie obiektowe w języku C. Warszawa: Wydawnictwa Naukowo-Techniczne, 1990. ISBN 83-204-1332-X. (pol.).
  7. Bit Operations. [w:] ABAP Programming (BC-ABA) [on-line]. help.sap.com – SAP Library. [dostęp 2011-09-08]. (ang.).
  8. Michał Morawski, Antoni M. Zajaczkowski: Wstep do programowania w jezyku Ada’95. Wyd. drugie. Łódz: 2004. [dostęp 2011-01-29]. (pol.).
  9. Artur Tyloch: Kurs Java. Opis języka, składni. Polski podręcznik.. www.webdeveloper.pl. [dostęp 2011-09-08]. (pol.).
  10. Niklaus Wirth: Modula 2. Warszawa: Wydawnictwa Naukowo-Techniczne, 1987, seria: Biblioteka Inżynierii Oprogramowania. ISSN 0867-6011. ISBN 83-204-0828-8. (pol.).
  11. Jan Bielecki: Rozszerzony PL/I i JCL w systemie OS/RIAD. Warszawa: Państwowe Wydawnictwo Naukowe, 1986, seria: Biblioteka Informatyki. ISBN 83-01-06146-4. (pol.).
  12. M. I. Auguston i inni: Programowanie w języku PL/1 OS JS. Warszawa: Państwowe Wydawnictwo Naukowe, 1988. ISBN 83-01-07463-9. (pol.).
  13. The Python Language Reference 2.7. docs.python.org, August 04, 2011. [dostęp 2011-09-27]. (ang.).
  14. The REXX language. killbox.pl. [dostęp 2011-09-08]. (ang.).
  15. Open Object Rexx™: Reference. www.oorexx.org. [dostęp 2011-09-08]. (ang.).
  16. Bit Shift Operators (Visual Basic). msdn.microsoft.com. [dostęp 2011-09-26]. (ang.).
  17. John Walkenbach: Excel 2003 PL. Programowanie w VBA.. HELION, 2004. ISBN 837361-504-0. (pol.).
  18. Wyrażenia. [w:] Prezentacja języka VHDL [on-line]. home.elka.pw.edu.pl. [dostęp 2011-09-12]. (pol.).
{{Przypisy}} Nieprawidłowe pola: przypisy.

Bibligrafia

Szablon:Bibliografia start

  • John E. Nicholls: Struktura języków programowania. Warszawa: Wydawnictwa Naukowo-Techniczne, 1980, s. 294–295, seria: Informatyka. ISBN 83-204-0246-8. (pol.).

Szablon:Bibliografia stop