Я работаю над проблемой из трещин Интервью с кодированием, в котором требуется, чтобы я менял нечетные и четные биты в целое число с минимальными инструкциями (например, бит 0 и 1 заменяются, биты 2 и 3 меняются местами и т. д.)Битмаскирование - когда использовать hex vs binary
Решение автора вращается вокруг, используя маску для захвата, в одном числе, нечетных битах и в другом количестве четных разрядов, а затем сдвигая их на 1
Я получаю ее решение, но я не понимаю, как она схватила четные/мелкие разряды. Она создает две бит-маски - в шестнадцатеричном формате - для 32-битного целого. Эти два: 0xaaaaaaaa и 0x55555555. Я понимаю, что она по существу создает эквивалент 1010101010 ... для 32-битного целого числа в шестнадцатеричном виде, а затем ANDing с исходным номером для захвата четных/нечетных бит соответственно.
Что я не понимаю, почему она использовала hex? Почему не просто код в 10101010101010101010101010101010? Использула ли она гексу, чтобы уменьшить многословие? И когда вы должны использовать один над другим?
Таким образом, вы можете использовать маску в любой базе без проблем? – Sunny
Да; это то же * значение *, независимо от используемой базы. Это всего лишь разные способы написания «двух миллиардов, восемьсот шестьдесят три миллиона триста одиннадцать тысяч пятьсот тридцать». Двоичные и шестнадцатеричные просто помогают сделать это более очевидным * почему * это конкретное значение используется. – chepner