Преобразования чисел в позиционных системах счисления. (Лекция 9)

Слайд 3

*

- произвольное число






,

- число системы q

* - произвольное число , - число системы q

Слайд 5

*


Перевод из одной системы в другую


тетрады

* Перевод из одной системы в другую тетрады

Слайд 9

*

Дано: байт 10110101
Требуется: заменить на "1"
только 1-ый разряд

* Дано: байт 10110101 Требуется: заменить на "1" только 1-ый разряд

Слайд 10

*

Дано: байт 10110110
Требуется: сохранить
содержимое 2-го разряда

Требуется: обнулить
содержимое 2-го разр.

* Дано: байт 10110110 Требуется: сохранить содержимое 2-го разряда Требуется: обнулить содержимое 2-го разр.

Слайд 12

*

Проверить самостоятельно!

* Проверить самостоятельно!

Слайд 13

*

// ? 11111101 11101000
# include
int main ( )
{
unsigned

* // ? 11111101 11101000 # include int main ( ) {
a;// это беззнаковое целое число
void ecran_bit (unsigned); // Прототип функции.
printf ("Введите беззнаковое целое число:");
scanf ("%u", &a);
ecran_bit (a); // Применяет операцию & к переменным b и с,
// где c = Maska (определена в неглавной функции).
return 0;
}
void ecran_bit (unsigned b)
{
unsigned i, Maska = 1<<15; //и выражение и операнд числа
printf ("%7u = ", b);
for (i = 1; i<=16; i++) {
putchar (b & Maska ? '1':'0'); // Для текущего кратного слова бита.
b<<=1;
if (i%8 == 0) // зачем делить на 8 (?)
putchar (' '); // функция возвращает символ.
}
putchar ('\n'); // В случае ошибки возвращает EOF.
} // End ecran_bit.

!
исследовать
алгоритм и дать
(письменно)
анализ работы
программы
при a=65000

Слайд 15

*

Пример программы с использованием
объединений, структур и битовых полей

// Побитовая печать

* Пример программы с использованием объединений, структур и битовых полей // Побитовая
содержимого регистра данных.
# include
void main (void)
{
unsigned char k; // Будет равен битовому коду.
int m, n; // Они делятся на 16 для формирования битовых полей.
void binar (unsigned char);
/* В функцию входит байт и там происходит обратное преобразование – побитово расшифровывается за счет обращения к отдельным полям. */
unsigned char cod (int, int);
/* В функции производится запись данных в битовые поля, а результат
возвращается из того же объединения в виде одного байта. */
printf ("\nm =");
scanf ("%d", &m);
printf ("\nn =");
scanf ("%d", &n);
k = cod (m, n);
printf ("cod = %u", k);
binar (k);
}

В лекции 10 эта программа
уже рассматривалась

Слайд 16

*

unsigned char cod (int a, int b) // a,b-для формирования
//битовых

* unsigned char cod (int a, int b) // a,b-для формирования //битовых
полей
{
union
{
unsigned char z; //будет равен битовому коду un.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;
} // End cod.

Слайд 17

*

void binar (unsigned char ch)
{
union
{
unsigned char ss;

* void binar (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;
printf ("\nНомера битов: 7 6 5 4 3 2 1 0");
printf ("\nЗначения битов: %d %d %d %d %d %d %d %d",
cod. byte. a7, cod. byte. a6, cod. byte. a5, cod. byte. a4,
cod. byte. a3, cod. byte. a2, cod. byte. a1, cod. byte. a0);
} // Печатаем, как предписано заголовком, т.е. со старшего бита.