Если у меня есть 32-разрядное двоичное число, и я хочу заменить более низкое 16-разрядное из двоичного числа с 16-разрядным числом, что я имею и сохраняю верхнее 16-разрядное из того числа для создания нового двоичного числа.. как я могу сделать этот использующий простой побитовый оператор?
Например, 32-разрядное двоичное число:
1010 0000 1011 1111 0100 1000 1010 1001
и более низкое 16-разрядное, которое я имею:
0000 0000 0000 0001
таким образом, результат:
1010 0000 1011 1111 0000 0000 0000 0001
как я могу сделать это?
Вы делаете это в два этапа:
Итак, в вашем случае
i32 number;
i32 mask_lower_16 = FFFF0000;
i16 newValue;
number = (number AND mask_lower_16) OR newValue;
В реальной реализации языка программирования вам также может потребоваться решить проблему расширения знака для 16-битного значения. В Java, например, вам нужно замаскировать верхние 16 бит короткого короткого
следующим образом:
short v = (short) 0xF00D;
int number = 0x12345678;
number = (number & 0xFFFF0000) | (v & 0x0000FFFF);
System.out.println(Integer.toHexString(number)); // "1234f00d"
Что ж, я могу сказать вам ответ. Но, возможно, это домашнее задание. Так что я не буду.
Учтите, что у вас есть несколько вариантов:
| // bitwise OR
^ // bitwise XOR
& // bitwise AND
Может быть, составьте небольшую таблицу и решите, какая из них даст вам правильный результат (когда вы работаете с правой частью вашего большего двоичного числа).
используйте &, чтобы замаскировать младшие биты, а затем | чтобы объединить 16-битное значение с 32-битным значением
uint a = 0xa0bf68a9
short b = 1
uint result = (a & 0xFFFF0000) | b;