Я занимаюсь программированием начального уровня на codefights.com и натолкнулся на следующий вопрос.Ссылка на блог, в котором есть ответ, но он также включает в себя вопрос.Если бы только у него было объяснение ...
https://codefightssolver.wordpress.com/2016/10/19/swap-adjacent-bits/
Меня беспокоит строка кода (это строка кода only ) ниже.
return (((n & 0x2AAAAAAA) >> 1) | ((n & 0x15555555) << 1)) ;
В частности, я изо всех сил пытаюсь найти приличную информацию о том, как работают "0x2AAAAAAA" и "0x15555555", поэтому у меня есть несколько глупых вопросов.Я знаю, что они представляют двоичные значения 10101010 ... и 01010101 ... соответственно.
1.Я перепутал некоторые из них и обнаружил, что число 5 и А соответствует слабо и, насколько я могу судить, битовому размеру, но как?
2.Почему как?Почему 5с?
3.Почему 2 и 1 перед As и 5s?
4.Что-нибудь еще, что я должен знать об этом?Кто-нибудь знает интересный пост в блоге или веб-сайт, который объясняет это более подробно?