Kurs maturalny z języka angielskiego!
kurs-maturalny-jezyk-angielski

PROGRAMOWANIE I ALGORYTMY

Zajęcia maturalne z informatyki
Olimpiada Informatyczna Juniorów
    Prowadzący: Marcin Kasprowicz
  • właściciel serwisu algorytm.edu.pl
  • wrzesień 2024 — start zajęć
  • czytaj więcej

Pola bitowe


powrót

Oprócz zwykłych pól w strukturach możemy zastosować tak zwane pola bitowe. Pole bitowe to wydzielenie pewnej stałej porcji bitów na daną zmienną. Na przykład zmienna typu char zajmuje w pamięci 1 bajt = 8 bitów. Możemy ją okroić lub rozszerzyć o porcję bitów dostosowaną do potrzeb programu. 

Pamięć jaką będzie zajmować takie pole będzie zawsze krotnością bajtów danego typu zmiennej. Np. jeśli stworzymy pole typu int na 4 bity, to i tak zostanie przydzielona pamięć na cały typ int czyli 4 bajty = 32 bity, a używać będziemy mogli tylko tych czterech bitów.

Więc gdzie tu oszczędność?

Gdy stworzymy na przykład pięć pól bitowych typu int, i każde będzie zajmowało 6 bitów, to w pamięci zostanie zarezerwowany obszar na jeden int, czyli 32 bity, ponieważ 5*6 = 30 ≤ 32, i właśnie tu mamy oszczędność pamięci.

Tworzenie pól bitowych 

Pola te tworzymy zgodnie z zasadą:

typ nazwa : [ilość bitów];

np. 

int pole_bitowe : 4; //pole bitowe na czterech bitach

Zakres wartości danych takiego pola wynosi:

[-23, 23-1] a więc [-8, 7]

Odwoływanie się do pól bitowych

Do takich elementów struktury odwołujemy się tak samo jak do innych jej pól, czyli za pomocą kropki lub "->" w przypadku wskaźników. Poniżej zademonstrowano przykładowe wykorzystanie pól bitowych:

#include<iostream>
using namespace std;

struct pola_bitowe{
	int a:4;
	int b:4;
};

int main()
{
	pola_bitowe x;
	
	cout<<"Struktura zajmuje "<<sizeof(x)<<" bajty pamięci\n"; //cztery bajty, tyle ile jeden int
	
	x.a = 7;  //maksymalna wartosć dodatnia jaką możemy nadać dla typu int na 4 bitach
	
	cout<<x.a<<endl;
	
	x.a--;	//pola bitowe możemy inkrementować i dekrementować tak jak zmienne typu int
	
	cout<<x.a<<endl;
	
	return 0;
}

Out:

Struktura zajmuje 4 bajty pamięci
7
6