Un mic puzzle
Am vazut urmatorul puzzle pe un site cu intrebari de interviu Microsoft. Daca nu il stiti deja, incercati sa il rezolvati singuri fara a cauta indicii pe net. E un test interesant de intelegere a operatiilor pe biti.
Ce returneaza functia foo, cand x e un intreg fara semn pe 32 de biti?
unsigned int foo(unsigned int x) {
x = ((x >> 1) & 0x55555555) | ((x & 0x55555555) << 1);
x = ((x >> 2) & 0x33333333) | ((x & 0x33333333) << 2);
x = ((x >> 4) & 0x0F0F0F0F) | ((x & 0x0F0F0F0F) << 4);
x = ((x >> 8) & 0x00FF00FF) | ((x & 0x00FF00FF) << 8);
return (x >> 16) | (x << 16);
}
Categorii:
remote content