Есть ли способ доступа к некоторым частям шестнадцатеричного числа в C?Побитовые операции с шестнадцатеричными номерами
Я хочу написать функцию, которая принимает шестнадцатеричное число и отменяет его, но оставляет младший значащий байт без изменений. Пример: 0x87654321 должен стать 0x789ABC21.
Я попытался каким-то образом сохранить LSB, а затем применить его к отрицаемому x, но моя проблема в том, что моя маска применяется ко всем байтам. Я мог бы жестко запрограммировать его для определенного значения, но, очевидно, это не то, что я хочу.
void b(int x) {
int temp = x & 0xFF; // temp is all 0 with the LSB being the same as x's
x = ~x; // this negates x
// one of a couple of attempts I tried thus far:
// x = (x & 0x00) | temp;
// idea: change x's LSB to 00 and OR it with temp,
// changing x's LSB to temp's LSB
}
Я был бы признателен, если вы не размещаете код для решения, а просто ответить, есть ли способ применить битовые операции к конкретным разделам шестнадцатеричного числа, или, как я мог бы решить эту проблему ,
Я не совсем знаком с C, и что именно делает &&? В Java или C++ это было бы логичным сравнением, но здесь это не имеет особого смысла, не так ли? – Beko
'x = (~ x & ~ 0xFF) | (x & 0xFF); ' –
Хотя я бы оценил ориентированный ответ, а не какой-то код, я все равно ценю это. Спасибо Ли, это действительно работает. – Beko