Bitowy typ danych

Z Wikipedii, wolnej encyklopedii

Typ bitowytyp danych reprezentujący ciąg bitów, łańcuch wartości zero-jedynkowych. Elementy tego typu są stosowane głównie do ustawiania flag oznaczających włączenie/wyłącznie pewnych opcji. Wartości bitowe zapisywane są za pomocą literałów bitowych.

PL/I[edytuj | edytuj kod]

W języku PL/I typ danych bitowych opisany jest przez odpowiedni atrybut:

  • BIT(n)
  • BIT(n) <VARYING | VAR>

gdzie:

  • n: jest długością ciągu bitów
  • VARYING: atrybut oznaczający zmienną długość danych bitowych, w tym przypadku wartość “n” oznacza maksymalną długość danych bitowych. Zapis tego atrybutu może zostać skrócona do formy VAR.

Na danych bitowych można wykonywać następujące operacje:

  • łącznie (analogicznie do konkatenacji łańcuchów znaków), operator ||, np. '10'B || '01'B='1001'B
  • koniunkcji, operator &, np. '1010'B & '0011'B='0010'B
  • alternatywa, operator |, np. '1010'B | '0011'B='1011'B
  • negacja, operator ¬, np. ¬'1011'B='0100'B
  • porównanie

Ponieważ języka PL/1 posiada niezwykle rozbudowany mechanizm konwersji, dostępne są również dla tego typu danych operacje arytmetyczne i łańcuchowe równocześnie, przy czym dla operacji łańcuchowych dane bitowe nie są przekształcane na znaki według tablicy znaków, lecz traktowane jak dane znakowe składające się ze znaków zer i jedynek.

Modula 2[edytuj | edytuj kod]

Nieco inaczej zaimplementowano typ bitowy w języku Modula 2, w którym predefiniowany jest typ zbiorowy bitów BITSET. Wartości tego typu wyrażane są za pomocą literałów zbiorowych liczb całkowitych. Przynależność danej liczby „i” do zbioru oznacza ustawienie „i”-tego bitu na wartość 1, w przeciwnym przypadki na 0. Sprawdzenie ustawienia konkretnego bitu dokonuje się za pomocną operatora przynależności do zbioru IN, włączenie lub wyłączenie „i”-tej flagi (bitu), można dokonać odpowiednio operacjami dołączenia do zbioru INCL i usunięcia za zbioru EXCL. Ponieważ typ bitowy w Moduli 2 został zaimplementowany jako tablica bitów, operacje zbiorowe (teoriomnogościowe) są w rzeczywistości realizowane za pomocą operatorów bitowych – logicznych (AND, OR, NOT), co zwiększa efektywność kodu.

Common Lisp[edytuj | edytuj kod]

W języku Common Lisp typ bitowy został zaimplementowany w postaci jednowymiarowej tablicy – wektora bitowego (bit-vector) zawierającego bity.

C[edytuj | edytuj kod]

W języku C nie ma typu bitowego, lecz występują pola bitowe w strukturach i uniach. Pola te powinny mieć rozmiar (wyrażony w bitach) nie większy niż słowo maszynowe danego systemu komputerowego. Deklaracja pola bitowego ma postać:

typ [identyfikator]: rozmiar;

Identyfikator jest elementem opcjonalnym powyższej deklaracji. Deklaracja bez identyfikatora tworzy pole anonimowe. Taka konstrukcja umożliwia ustawienie kolejnych pól bitowych na określonej pozycji w słowie maszynowym, z pominięciem tych bitów które są nieistotne, do których nie będzie możliwości bezpośredniego odwołania. Pola bitowe w języku C są polami o typie bazowym jednego z typów podstawowych (najczęściej typ całkowity bez znaku: unsigned). W związku z tym wartości pól bitowych są reprezentowane za pomocą literałów takich jak dla typu bazowego. To samo dotyczy operacji, które są takie same jak dla typu bazowego.

Pozostałe języki[edytuj | edytuj kod]

W większości języków programowania, nie ma typu bitowego. Zwykle do implementacji powyższej konstrukcji stosuje się typ całkowity, a dostęp do poszczególnych bitów (nadawanie wartości, sprawdzanie ustawienie konkretnego bitu), realizuje się za pomocą operatorów bitowych (np. and, or, xor, not – Pascal) i operatorów relacji, np. ustawienie najmniej znaczącego bitu: zmienna:=zmienna or $01; sprawdzenie ustawienia najmniej znaczącego bitu: if (zmienna and $01)<>0 then … .

Bibliografia[edytuj | edytuj kod]

Zobacz też[edytuj | edytuj kod]