Я пишу функцию для обработки входящего 32-разрядного буфера, представляющего изменение данных, когда он сравнивается с соответствующим сохраненным 32-битным буфером. Позиция изменяющегося бита представляет собой число (то есть значение 8 бит 3 бит), которое необходимо обработать, а также то, является ли изменение 0-> 1 или 1-> 0. Вот текущая реализация, пожалуйста, помогите мне улучшить ее! Обратите внимание, что это не фактический код, он был упрощен, чтобы быть контекстно-нейтральным.Помогите мне улучшить этот код обработки битового буфера C++
uint32_t temp = oldBuffer^newBuffer;
uint32_t number = 0;
while (temp != 0)
{
if (temp & 0x1)
{
uint32_t bitValue = 0;
if ((newBuffer& (1 << number)) != 0) bitValue = 1;
processNumber(number, bitValue);
}
number++;
temp = temp >> 1;
}
oldBuffer = newBuffer;
Сейчас он работает, но мне не нравится, что он должен проверить каждый бит, проверяя бит 1 и переход через всю вещь. Если бы была гарантия быть только 1 бит, что было бы не слишком сложно понять, но это не так.
Редактировать: К Нейлу, я думаю, я надеюсь найти способ получить позиции бит после XOR в постоянное время, вместо того, чтобы полностью переходить через буфер и проверять бит один за другим.
Улучшение в каком смысле? – 2009-08-20 17:00:22
Вы можете использовать стандартную библиотеку? – xtofl