Маскировка осуществляется путем установки все биты, кроме одного (ов) вы хотите 0. допустим, у вас есть 8 бит переменной а и вы хотите проверить если 5-й бит от 1. Предположим, что ваша переменная равна 00101100
. Чтобы скрыть все остальные биты мы установили все биты, кроме 5-ой до 0 с помощью & оператора:
00101100 & 00010000
Теперь то, что это делает для каждого бита, кроме 5-ой, бит от байта на право будет 0, поэтому результатом операции & будет 0. Для 5-го бита, однако, значение из правого бита равно 1, поэтому результат будет тем, что значение hte 5-го бита из левого байта - в этом случае 0:
Теперь, чтобы проверить это значение, вы должны его сравнить. Чтобы сделать это, просто сравнить результат с байтом справа:
result = (00101100 & 00010000) == 00000000
Для обобщения этого, вы можете получить любой бит из левостороннего байта просто сдвиг влево 00000001, пока вы не получите немного вы хотите. Следующая функция достигает этого:
int getBit(char byte, int bitNum)
{
return (byte & (0x1 << (bitNum - 1)))
}
Это работает на Варс любого размера, будь то 8, 16, 32 или 64 (или что-нибудь еще в этом отношении).
если вы хотите проверить '5th' и' 7th' число '101 'или нет, тогда сохраните маску как' int mask = 0x0000 1010 0000 0000'. а затем 'ExNOR' это .. если' extract' '5' и' 7th' бит '111', то это' 101' – Haris
Я думаю, что ваш первый номер '0x1a4b' не' 0x1a43'? – ilent2
@ ilent2 извините, мой плохой! исправленный. – stillAFanOfTheSimpsons