Будет ли это то, что вы ищете?
Register_B = Register_A & 0x003F; // take the 6 LSB ( bits 0-5 )
Register_C = Register_A & 0x07C0; // take the bits 6-10
Register_C = (Register_A & 0x07C0) >> 6; // Or maybe you want to place these bits elsewhere using bit shift ?
Вот дополнительные пояснения по использованию битов в C. В основном для микроконтроллеров, но точно так же можно использовать в Windows, кроме васне используйте регистры напрямую в Windows.
Десятичное число 5 = двоичное 0000 0101 = шестнадцатеричное 0x05 Десятичное число 16 = шестнадцатеричное 0x10
Если вы не знаете, как это работает, немного погуглите в Google.
Теперь этот пример в двоичном виде:
x = (5 << 1);
5 = 0000 0101
5 << 1 = 0000 1010 ( same sa 5, but bits are shifted left by 1 )
5 << 2 = 0001 0100 ( 5 shifted by 2 bits to the left. )
Наконец, вы также можете сравнивать биты битов «MASK»: этот код показывает, как сравнивать биты.
x = 5;
if( x & 0x01)
{ .. code here is executed because at least 1 bit from "0x01" is present in "decimal 5"
}
- (переменная & var2) означает, что хотя бы один бит равен 1 в обеих переменных
- (Var1 | Var2) означает, что любая из 2 переменных имеет значение true.
- (Var1 ^ Var2) означает, что по крайней мере один бит равен «1» в одной переменной и «0» в другой.В принципе, если Var1 отличается от Var2, это будет верно.
Вы также можете MASK биты:
Var1 = 254; // all 8 bits are "1" except the least significant bit which is 0.
Var2 = Var1 & 0x0F; // 0x0F = only last 4 bits "1".
В этом случае Var2 будет заканчиваться на 0000 1110
, потому что1111 1110 & 0000 1111
дает этот результат.Все биты, которые равны «1» в обоих значениях, станут равными «1» для Var2, но все остальные будут равны 0. Это побитовая операция И, где каждый бит результата зависит только от соответствующих битов входов.
Я не учитель, но этого должно быть достаточно, чтобы вы начали.Я знаю, что вам не нужно это много в Windows, но программирование микрочипа означает много играть с битами напрямую.
Снова о регистрах ... просто думайте о них как о обычных переменных, но микроконтроллер читает и пишетдля них все время, поэтому запись значения может иметь эффект, например мигание светодиода или отправка байта на порт USART / COM.Чтение таблицы данных даже покажет вам, что некоторые регистры предназначены только для чтения или только для записи, и, как правило, подробно объясняет, что делает регистр.Если вы программируете MCU, например, pic или AVR, вам необходимо понять спецификацию, это ваш самый ценный инструмент.