Text: |
ФІО = Горбаченко В.А.
Запитання:/*
* Звіт
* Горбаченка Василя Анатолійовича
* Студента 1-го курсу. Радіофізичного факультету. Напрям підготовки: Прикладна фізика.
* Група 3.
* Лабораторна робота №3. Варіант 12.
* Завдання:
*/
#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
using namespace std;
void print_bits (unsigned n)
{ // функція друкує біти, функція з лекії
int bit; // змінна, в якій буде знаходитись поточне значення кількості бітів
for (bit = sizeof(n)*8-1; bit >= 0; bit--)
// початкове значення bit = довжина змінної unsigned
{
if ((n >> bit) & 01)
{ // тут іде логічне множення... складно пояснити, але спробую...
// (n >> bit) - здвигає на "bit" розрядів
// & 01 - логічне множення - тобто, грубо кажучи кусає правіший біт
// тут іде побітове множення(чи просто кажучи побітове "і"), для прикладу:
// 10101110001101
// & побітове "і"
// 00000000000001 тобто тут насправді (01)
// =
// 00000000000001 - цей результат позитивний, тобто більше нуля,
// а значить, грубо кажучи == TRUE
putchar ('1');
}
else
{// іначе 0 - наприклад:
// 011010
// &
// 000001
// =
// 000000 - == FALSE або нулю - негативний
putchar ('0');
}
if (bit % 4 == 0) putchar (' '); // якщо біт, на якому стоїть лічильник кратний чотирьом, то ставимо пробіл
}
cout<<endl; // перевод на нову строчку
}
unsigned inverse_bits (unsigned x,unsigned y,int p,int n)
{
unsigned result=~x; // инверт
unsigned z=0;
//====================================================================================
// Готовим ЗАЧИСТКУ
for (int i = 0 ; i < n ; i++ )
{// заполняем еденичками z в конец
z <<=1;
z = z | 1;
}
for (int i = 0 ; i < p ; i++ )
{// заполняем ноликами z в конец
z <<= 1;
}
// ЗАЧИСТКА готова
// теперь наложим нашу зачистку на x
// x = x | z;
result= ~ ( result | z ); // делаем зачистку "00000" того места, которое мы будем записовать
//====================================================================================
// Готовим ЗАЧИСТКУ
for (int i = 0 ; i < n ; i++ )
{// заполняем еденичками z в конец
z <<=1;
z = z | 1;
}
for (int i = 0 ; i < p ; i++ )
{// заполняем ноликами z в конец
z <<= 1;
}
// ЗАЧИСТКА готова
//====================================================================================
//теперь приготовим те битики, которые нам надо заменить в спец формате со здвигом p
z=0;
for (int i = n-1 ; i >= 0 ; i-- ){
z <<= 1;
z = z | ( (y>>i) & 01 );
}
for (int i = 0 ; i < p ; i++ ){
z <<= 1;
}
//====================================================================================
// теперь самый ответственный момент... Да, тот самый долгожданный ;)))
result = result | z ;
//====================================================================================
// Усё. г.
return result;
}
int main(){
unsigned x, y; // створюємо цілу беззнакову двохбайтову змінну
int n,p;
cout << "Input x" << endl; // підсказка користувачу
cin >> x; // зчитуємо число
print_bits (x); // друкуємо біти
cout << "Input y" << endl; // підсказка користувачу
cin >> y; // зчитуємо число
print_bits (y); // друкуємо біти
do
{
cout << "Input p" << endl; // підсказка користувачу
cin >> p; // зчитуємо число
if (p<=0) {cout<<"ERROR : N>0"<<endl;}
}while (p<=0);
do
{
cout << "Input n" << endl; // підсказка користувачу
cin >> n; // зчитуємо число
if (n<=0) {cout<<"ERROR : N>0"<<endl;}
}while (n<=0);
print_bits (inverse_bits (x,y,p,n)); // друкуємо біти
system ("PAUSE");
return 0;
}
====================================
|