Advertisement
Guest User

Untitled

a guest
Nov 23rd, 2014
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.62 KB | None | 0 0
  1. #include "stdafx.h" //библиотека для облегчения работы компилятора
  2. #include <iostream> //библиотека потокового ввода и вывода
  3. #include <locale.h> //библиотка для вывода языков
  4. #include <conio.h>
  5. using namespace std;
  6.  
  7. void main()
  8. {
  9. int x = 0; //переменная типа int
  10. setlocale(LC_ALL, "Russian"); //подключение русского языка
  11. cout << "введите х"<<endl; //вывод сообщения
  12. cin >> x; //читает сообщение с консоли и присваивает значение переменной Х
  13. int count=0;
  14. int countp=0; //присваивание переменным count и countp типа инт значение 0
  15.         for (int i = 0; i < 32; ++i) //перебор значений i от 0 до X
  16.         {
  17.                 if (i && !(i % 8)) cout << " "; //разбивает на байты
  18.                 if (x & (0x80000000>>i)) cout << 1; //если после побитового сдвига маски на i
  19.                 //вправо получается число содержащее единицу то условие верно
  20.                 else cout << 0; //  иначе вывести 0
  21.         }
  22.         cout <<endl; //перевод на новую строку
  23.         for (int i=0;i<(4-1);i++)
  24.         {
  25.             for (int j=0;j<(4-1-i);j++)
  26.             {
  27.                 for (int v=0;v<8;v++)//для v от 0 до 8 с шагом 1
  28.                 {
  29.                     if (x & 0x80000000>>(j*8+v)) count++; // подсчитывает кол-во ед. битов в байте
  30.                     if (x & 0x80000000>>((j+1)*8+v)) countp++; // подсчитывает кол-во ед. битов в след. байте
  31.                 }
  32.                 if (count>countp) //сравниваем кол-во ед. битов в текущем и следующим
  33.                 {
  34.                     for (int v=0;v<8;v++)//для v от 0 до 8 с шагом 1
  35.                     {
  36.                         if ( (bool)(x & 0x80000000>>(j*8+v)) != (bool)(x & 0x80000000>>((j+1)*8+v)) )//если в результате поразрядного
  37.                             //сравнения бит первого байта не равен второму, они меняются их местами
  38.                         {
  39.                             x ^= 0x80000000>>(j*8+v);// инвертироваие операцей XOR
  40.                             x ^= 0x80000000>>((j+1)*8+v);
  41.                         }
  42.                     }
  43.                 }
  44.                 count=0;//обнуляем переменные, чтобы использовать их для оставшихся байтов
  45.                 countp=0;
  46.             }
  47.         }
  48.  
  49.  
  50.  
  51.         for (int i = 0; i < 32; ++i)
  52.         {
  53.                 if (i && !(i % 8)) cout << " ";
  54.                
  55.                 if (x & (0x80000000>>i)) cout << 1;
  56.                    
  57.                 else cout << 0;            
  58.         }
  59.         _getch();
  60. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement