Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <string>
- #include <iostream>
- #include <stdexcept>
- #include "std_lib_facilities.h"
- using namespace std;
- unsigned zadanie(unsigned x)
- {
- unsigned maskaG, maskaD, przesuniecie;
- przesuniecie = 4 * sizeof(unsigned);//przypisz 4*4 czyli 0x00000010
- maskaG = ~0; //przypisz 0xffffffff (negacja 0x00000000)
- maskaD = maskaG >> przesuniecie; //przypisz maskaG przesuniętą o w prawo o 16 czyli 0xffffffff >> 0x10 = 0x0000ffff
- maskaG = maskaD << przesuniecie; //przypisz maskaD przesuniętą o w lewo o 16 czyli 0x0000ffff << 0x10 = 0xffff0000
- do{
- przesuniecie >>= 1; //przesuń o 1 czyli będzie 0x8 potem 0x4 potem 0x2 potem 0x1 potem 0x0 czyli pętla wykona się 5 razy
- if (x & maskaG){ //jeżeli w dwóch najstarszych bitach, na które wskazuje maskaG (za pierwszym razem) jest conajmniej jedna 1 to:
- x &= maskaG; //wyzeruj najmłodsze bity, na które wskazuje maskaD
- maskaD = maskaG & (maskaG >> przesuniecie);//przypisz do maskaD najmłodszą połówkę jedynek z maskiG
- maskaG ^= maskaD;//przypisz do maskaG najstarszą połówkę jedynek, na które wskazuje maskaG
- }
- else {
- maskaG = maskaD & (maskaD << przesuniecie);//przypisz do maskaD najmłodszą połówkę jedynek z maskiG
- maskaD ^= maskaG;//przypisz do maskaG najstarszą połówkę jedynek, na które wskazuje maskaG
- }
- } while (przesuniecie > 0);
- return x;
- }
- int main()
- {
- cout << setfill('0') << hex << setw(8) << zadanie(0x00FF0000) << endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment