Вывод значений битовых полей 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Вывод значений битовых полей



Объяснить результат!!!

если дана структура с битовыми полями   EXAMPLE:

struct EXAMPLE { int i:2; 

                                unsigned j:2;

                                int:2;

                                int k: 2;

};

 

int main()                                                                        

{

EXAMPLE my_struct;

my_struct.i=3;    my_struct.j=3;    my_struct.k=-1;

cout << dec << my_struct. i <<" " << my_struct. j <<" "<<my_struct. k << endl;

 


 

 my_struct.i = 2; my_struct.j = 2; my_struct.k = 1;

cout << dec << my_struct. i << " "<< my_struct. j << " " <<my_struct. k << endl;

_getch();

return 0;                             

}

 Формирование кода символа с помощью битовых полей объединения

 

Формирование кода символа ‘D’ (6810=4416).

Вариант 1:

union

{char simb;

   struct {int x:5;

               int y:3;

    } hh;

}cod;                                             

                                 

 

int main()

{

cod.hh.x=4;

cod.hh.y=2;

cout<<cod.simb;    // D (код 44)

 

_getch();

return 0;

}

7                                         0

 

0 1 0 0 0 1 0 0

 

 

                           hh.x (5 битов)

    hh.y (3 бита)

 

Формирование кода символа ‘D’ (6810=4416).

Вариант 2.

Используется функция, которая упаковывает в байт остатки от деления на 16 двух чисел

int main()

{

int a=36, b=20;           //два числа для формирования кода символа ‘D’

cout << cod(a, b) << endl;

_getch();

return 0;

}

 

unsigned char cod (int a, int b)

{ union {   

          unsigned char z;       

       struct {unsigned int x:4;

                 unsigned int y:4;

       } hh;

} un;

un.hh.x=a%16;   //остаток равен 4

un.hh.y=b%16;   //остаток равен 4

return un.z;         //возвращает символ с кодом 44

}

Формирование байта и вывод на экран его двоичного представления

 (функция cod() упаковывает в байт два числа

  функция binary()   выводит на экран двоичное представление байта-параметра):

unsigned char cod (int a, int b);

void binary (unsigned char ch);

int main()

{ int k, m, n;

cout << "m=? n=?: ";

cin >> m >> n;

k = cod (m, n);                   //упаковка значений в байт

cout << "cod= " << hex <<k <<endl;  //вывод кода

cout << "simvol= " << char(k) << endl; //вывод символа

cout << dec << endl;

binary(k);          //вывод на экран двоичного представления байта

_getch();

  return 0;

}

unsigned char cod (int a, int b)

{ union {

          unsigned char z;

       struct {unsigned int x:4;

                unsigned int y:4;

} hh;

} un;

 un.hh.x=a%16;         //получение остатков от чисел-аргументов

 un.hh.y=b%16;

 return un.z;       //возвращает символ с полученным кодом 44

}

void binary (unsigned char ch) //вывод на экран двоичного представления байта

{ union {                 //определение локального объединяющего типа

      unsigned char ss;

struct {

              unsigned a0:1; //каждый бит получает название 

              unsigned a1:1;

              unsigned a2:1;

         unsigned a3:1;

              unsigned a4:1;

               unsigned a5:1;

              unsigned a6:1;

              unsigned a7:1;

       } byte;

} cod;                            //определение локальный переменной-объединения

 

 cod.ss=ch;               //занесение в объединение значения аргумента функции            

 cout << "nomera bitov: 7 6 5 4 3 2 1 0\n";

 cout <<"znachenie: ";

 cout << " " << cod.byte.a7 << " " << cod.byte.a6; //так как все биты

 cout << " " << cod.byte.a5 << " " << cod.byte.a4; //имеют названия

 cout << " " << cod.byte.a3 << " " << cod.byte.a2;

 cout << " " << cod.byte.a1 << " " << cod.byte.a0;

 cout <<endl;

}

 

Открыв наук зелёный том, Я долго думал, а потом Закрыл его и кинул в реку. Науки вредны человеку, Науки тянут нас в беду. Возьмемся лучше за еду! Даниил Хармс

                                               А вот теперь:


[1] * На оценку выше 5



Поделиться:


Последнее изменение этой страницы: 2021-12-15; просмотров: 50; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.138.105.124 (0.008 с.)