Языки программирования - концепции и принципы

и это позволяет программисту использовать


typedef struct {

int : 3;                        /* Заполнитель */

 int     f1     :1;

 int    f2    :2;



C

int : 3;                    /* Заполнитель */

int     f3    :2;



int : 4;                   /* Заполнитель */

int    f4    :1;

}reg;

и это позволяет программисту использовать обычную форму предложений присваивания (хотя поля и являются частью слова), а компилятору реализо­вать эти присваивания с помощью сдвигов и масок:

reg r;

C

[с] int i;

i = r.f2;

r.f3 = i;

Язык Ada неуклонно следует принципу: объявления типа должны быть абстрактными. В связи с этим спецификации представления (representation speci­fications) используют свою нотацию и пишутся отдельно от объявления типа. К следующим ниже объявлениям типа:

type Heat is (Off, Low, Medium, High);

type Reg is

Ada

      record

F1: Boolean;

F2: Heat;

F3: Heat;

F4: Boolean;

end record;

может быть добавлена такая спецификация:

Ada

for Reg use

 record

F1 at 0 range 3..3;

 F2 at Orange 4..5;

F3at 1 range 1..2;

F4at 1 range 7..7;

end record;

    Конструкция at определяет байт внутри записи, a range определяет отво­димый полю диапазон разрядов, причем мы знаем, что достаточно одного бита для значения Boolean и двух битов для значения Heat. Обратите внима­ние, что заполнители не нужны, потому что определены точные позиции полей.

   Если разрядные спецификаторы в языке С и спецификаторы представле­ния в Ada правильно запрограммированы, то обеспечена безошибочность всех последующих обращений.

 

 

Порядок байтов в числах

   Как правило, адреса памяти растут начиная с нуля. К сожалению, архитекту­ры компьютеров отличаются способом хранения в памяти многобайтовых значений. Предположим, что можно независимо адресовать каждый байт и что каждое слово состоит из четырех байтов. В каком виде будет храниться це­лое число 0x04030201: начиная со старшего конца (big endian), т.

Содержание раздела