pretty bitwise operations, handler2006, 31-Май-12, 01:13 [смотреть все]Здравствуйте! Дано: Двухбайтовая битовая маска. Задача: сравнить биты данной маски (к примеру, 13-ый и 14-ый). Решение:
unsigned short bitMask = 0x6000; // (0110 0000 0000 0000) int bitFlag = 3; // (0000 0000 0000 0000 0000 0000 0000 0011) in 32-bit arch // todo if ( (bitMask&(bitFlag<<13))>>13 == bitFlag ) { // bits are proprietary }
На мой взгляд, конструкция корявая (сдвинули, сложили, опять сдвинули, потом сравнили результат с эталонным). Тем более в большом проекте такая конструкция будет вводить в ступор программистов. Возможно, существуют более изящные приемы работы с битовыми массивами? Спасибо. Алексей
|
- pretty bitwise operations, Alex_S, 04:46 , 31-Май-12 (1)
- pretty bitwise operations, pavlinux, 01:10 , 01-Июн-12 (2)
- pretty bitwise operations, pavlinux, 01:54 , 01-Июн-12 (3)
- pretty bitwise operations, pavlinux, 04:21 , 02-Июн-12 (4)
- pretty bitwise operations, handler2006, 05:34 , 02-Июн-12 (5)
Собственно, последний вариант и использую в "курсовой". А статья действительно хорошая. Спасибо. Только немного так:
unsigned mask; // input bitmask unsigned flag; // given checked mask unsigned bits; if (mask^(flag<<bits)) { // all flag's bits are equal to mask }
- pretty bitwise operations, pavlinux, 15:57 , 02-Июн-12 (6)
- pretty bitwise operations, handler2006, 18:29 , 02-Июн-12 (7)
Полностью с Вами согласен, и дело даже не в преподавателях - за этот проект мне платят деньги (на работе), но я только еще учусь. XOR в данном случае даст true , если все проверяемые биты совпали и false - если хоть один бит не совпал, что отвечает Вашему замечанию. Однако в моем коде проверяется условие на true - видимо в теле условия мне необходимо выполнить действия, соответствующие несовпадению по маске - я просто неправильно описал алгоритьм в примере.
- pretty bitwise operations, Alex_S, 06:11 , 04-Июн-12 (10)
- pretty bitwise operations, handler2006, 06:47 , 04-Июн-12 (11)
Дано: двухбайтовая битовая маска (набор из 16 битов) Задача: проверить на соответствие 13-ый и 14-ый бит (считывается из конфига в виде, допустим, тоже двухбайтового числа, принимаемого значения 0, 1, 2 и 3). Ваши предложения?
- pretty bitwise operations, pavlinux, 14:15 , 04-Июн-12 (12)
|