Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stdafx.h" //библиотека для облегчения работы компилятора
- #include <iostream> //библиотека потокового ввода и вывода
- #include <locale.h> //библиотка для вывода языков
- #include <conio.h>
- using namespace std;
- void main()
- {
- int x = 0; //переменная типа int
- setlocale(LC_ALL, "Russian"); //подключение русского языка
- cout << "введите х"<<endl; //вывод сообщения
- cin >> x; //читает сообщение с консоли и присваивает значение переменной Х
- int count=0;
- int countp=0; //присваивание переменным count и countp типа инт значение 0
- for (int i = 0; i < 32; ++i) //перебор значений i от 0 до X
- {
- if (i && !(i % 8)) cout << " "; //разбивает на байты
- if (x & (0x80000000>>i)) cout << 1; //если после побитового сдвига маски на i
- //вправо получается число содержащее единицу то условие верно
- else cout << 0; // иначе вывести 0
- }
- cout <<endl; //перевод на новую строку
- for (int i=0;i<(4-1);i++)
- {
- for (int j=0;j<(4-1-i);j++)
- {
- for (int v=0;v<8;v++)//для v от 0 до 8 с шагом 1
- {
- if (x & 0x80000000>>(j*8+v)) count++; // подсчитывает кол-во ед. битов в байте
- if (x & 0x80000000>>((j+1)*8+v)) countp++; // подсчитывает кол-во ед. битов в след. байте
- }
- if (count>countp) //сравниваем кол-во ед. битов в текущем и следующим
- {
- for (int v=0;v<8;v++)//для v от 0 до 8 с шагом 1
- {
- if ( (bool)(x & 0x80000000>>(j*8+v)) != (bool)(x & 0x80000000>>((j+1)*8+v)) )//если в результате поразрядного
- //сравнения бит первого байта не равен второму, они меняются их местами
- {
- x ^= 0x80000000>>(j*8+v);// инвертироваие операцей XOR
- x ^= 0x80000000>>((j+1)*8+v);
- }
- }
- }
- count=0;//обнуляем переменные, чтобы использовать их для оставшихся байтов
- countp=0;
- }
- }
- for (int i = 0; i < 32; ++i)
- {
- if (i && !(i % 8)) cout << " ";
- if (x & (0x80000000>>i)) cout << 1;
- else cout << 0;
- }
- _getch();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement