Guest User

Untitled

a guest
Aug 4th, 2015
181
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.45 KB | None | 0 0
  1. #include <string>
  2. #include <iostream>
  3. #include <stdexcept>
  4. #include "std_lib_facilities.h"
  5. using namespace std;
  6.  
  7. unsigned zadanie(unsigned x)
  8. {
  9.     unsigned maskaG, maskaD, przesuniecie;
  10.  
  11.     przesuniecie = 4 * sizeof(unsigned);//przypisz 4*4 czyli 0x00000010
  12.     maskaG = ~0;                        //przypisz 0xffffffff (negacja 0x00000000)
  13.     maskaD = maskaG >> przesuniecie;    //przypisz maskaG przesuniętą o w prawo o 16 czyli 0xffffffff >> 0x10 = 0x0000ffff
  14.     maskaG = maskaD << przesuniecie;    //przypisz maskaD przesuniętą o w lewo o 16 czyli 0x0000ffff << 0x10 = 0xffff0000
  15.  
  16.     do{
  17.         przesuniecie >>=  1;    //przesuń o 1 czyli będzie 0x8 potem 0x4 potem 0x2 potem 0x1 potem 0x0 czyli pętla wykona się 5 razy
  18.         if (x & maskaG){        //jeżeli w dwóch najstarszych bitach, na które wskazuje maskaG (za pierwszym razem) jest conajmniej jedna 1 to:
  19.             x &= maskaG;        //wyzeruj najmłodsze bity, na które wskazuje maskaD
  20.             maskaD = maskaG & (maskaG >> przesuniecie);//przypisz do maskaD najmłodszą połówkę jedynek z maskiG
  21.             maskaG ^= maskaD;//przypisz do maskaG najstarszą połówkę jedynek, na które wskazuje maskaG
  22.         }
  23.         else {
  24.             maskaG = maskaD & (maskaD << przesuniecie);//przypisz do maskaD najmłodszą połówkę jedynek z maskiG
  25.             maskaD ^= maskaG;//przypisz do maskaG najstarszą połówkę jedynek, na które wskazuje maskaG
  26.         }
  27.     } while (przesuniecie > 0);
  28.     return x;
  29. }
  30.  
  31. int main()
  32. {
  33.     cout << setfill('0') << hex << setw(8) << zadanie(0x00FF0000) << endl;
  34. }
Advertisement
Add Comment
Please, Sign In to add comment