我有严格的内存限制,不允许我为后续的位操作分配堆内存或在堆栈上使用局部变量。
我有两个整数值A
和B
(假设它们只是两个字节值)。我想知道A & B
的结果是什么(例如A &= B
的结果),然后将A
的原始值恢复到A
中。
由于不允许有额外的内存,因此我无法临时存储A
的原始值。我可以简单地使用一系列位操作来恢复A
的值吗?
这样做的原因是我有大量的数据,在我按位计算之后,我需要对这些数据进行计数。但是我需要保留原始值,以将它们与其他值进行测试。实际数据位于堆分配非常昂贵的设备上。而且数据的长度是动态的,因此我无法声明局部变量来保存其临时值。
这可能吗?如果是这样,我该怎么办?
答案 0 :(得分:1)
似乎给人的印象是需要制作整个阵列的副本,修改副本,然后对其执行操作。没必要。
对于数组的每个元素,计算A & B
并将其存储在本地。然后计算设置的位数,并将其添加到运行总计中。
例如:
int count_bits_with_and(unsigned char *array, int size, unsigned char val)
{
int i, sum;
for (i=0, sum=0; i<size; i++) {
unsigned char v = array[i] & val;
int count = count_bits(v);
sum += count;
}
return sum;
}