Bit поле програмиране С и С

За разлика от други компютърни езици C има функция, наречена битови полета, позволява да се работи с отделни битове. Бит полета са полезни по няколко причини. са изброени по-долу Три от тях:

  1. Ако ограничено пространство за съхранение, можете да съхранявате множество логически (вярно / невярно) променливи в един байт.
  2. Някои интерфейс устройство предава информационни бита кодирана в един байт.
  3. Някои процедури за кодиране, за да получат достъп до отделни битове в един байт.

Въпреки че всички тези функции може да се извърши с помощта на битовите оператори, битови полета могат да донесат по-голяма яснота за програмата.

структура тип име name1 структура: дължина;
тип NAME2: дължина;
.
imyaN тип: дължина;
>

Бит полета трябва да бъдат обявени за вътр, неподписани или подписани. Полето за малко на дължина 1 трябва да бъдат декларирани като неподписан, тъй като един бит може да има никаква следа. област Bit може да има дължина от 1 до 16 бита на 16-битовата среда, и от 1 до 32 бита за 32-битови условия. В Borland C ++, най-левия бит е знак.

Помислете по-горе структура дефиниция по-долу:

Struct устройство неподписан активен. 1;
неподписан готов. 1;
неподписан xmt_error. 1;
> Dev_code;

Тази структура се определят три променливи от един бит на всеки. Структурно dev_code променлива може, например, да се използва за декодиране на информацията от пристанището на лентовото устройство. За тази хипотетична лентово устройство, следния код пише един байт на информация за лентата и проверка за грешки, използващи dev_code:

невалидни wr_tape (знак в)
докато (dev_code.ready!) то (dev_code); / * Изчакайте * /
wr_to__tape (и); / * Напиши байт * /
докато (dev_code.active) то (dev_code); / * Изчакайте, докато записвате информация * /
ако (dev_code.xmt грешка) ФОРМАТ ( "Грешка при писане");
>

Тук Боже () връща състоянието на wr_to_tape на лентово устройство (), пише данни. Цифрата показва как изглежда dev_code променлива в паметта.

Фигура: Поставянето на малко поле от паметта на dev_code

Както може да се види от предишния пример, всяка област е достъпна с помощта на "точка" оператор. Въпреки това, ако има обжалване се с помощта на показалеца, трябва да използвате -> оператор.

Не е необходимо да се обадите всяко поле малко. Игрището, с име, то е по-лесно за достъп. Например, ако лентово устройство връща информацията, структура устройство, за да бъде променена при настъпването на края на колана в петия бит е, както следва:

Struct устройство неподписан активен. 1;
неподписан готов. 1;
неподписан xmt_error. 1;
неподписан. 2;
неподписан EOT. 1;
> Dev_code;

И накрая, можете да смесвате различни структурни променливи в битови полета. Например:

структура на ЕМИ структура на вр адрес;
плава заплащане;
неподписан lay_off: 1;
неподписан час: 1;
неподписани удръжки: 3;
>;

определя рекорд служител, който използва само един байт за съхранение на три вида информация - състоянието на един служител, независимо дали той е платил и сумата на приспаданията получили. Без използването на битови полета, тази информация ще отнеме три байта.