C, PHP, VB, .NET

Дневникът на Филип Петров


* Разредни полета

Публикувано на 25 октомври 2008 в раздел С/С++.

В езика за програмиране С могат да се дефинират набори от последователни битове. Такива набори се наричат „разредни полета“. Те осигуряват връзката между високото ниво на езика и ниското ниво на апаратната част.

Разредните полета се дефинират като елементи на структура по следния начин:

	unsigned int <име>:<размер>

Следният пример демонстрира дефинирането на разредни полета:

	struct field{
		unsigned int f1:2;
		unsigned int f2:3;
		int n;
	} x;

За полето f1 сме отделили 2 бита, а за f2 сме отделили 3. Обръщението към разредните полета и използването им в изрази е като обикновени елементи на структура:

	x.f1 = 0;
	x.f2 = 3;

Ако сме записали стойност, която е по-голяма от отделеното място за разредното поле, то в полето ще се запишат толкова бита от двоичното представяне на величината, колкото е размерът на полето.

Характерен случай за използване на разредни полета, е когато е нужно да използваме като резултати от изпълнение на дадена функция само две стойности – 0 или 1. Въпреки, че този резултат може да се запише само в един бит ние все пак заделяме памет за цял int.

Друго важно приложение, е когато съставяме данни, които се характеризират освен със стойност и с параметри. Добре е да може основната стойност и параметрите да могат да се записват в една машинна дума. Например когато отпечатваме буква на екрана ние пазим нейния ASCII код, но освен това цвета на фона на символа, яркостта, и тн.

Важно: Не е възможно да се създават указатели към разредни полета и не е възможно създаването на масиви от разредни полета.

 



Добави коментар

Адресът на електронната поща няма да се публикува


*