按位就位,然后恢复原始值

时间:2019-02-07 16:06:47

标签: c bit-manipulation

我有严格的内存限制,不允许我为后续的位操作分配堆内存或在堆栈上使用局部变量。

我有两个整数值AB(假设它们只是两个字节值)。我想知道A & B的结果是什么(例如A &= B的结果),然后将A的原始值恢复到A中。

由于不允许有额外的内存,因此我无法临时存储A的原始值。我可以简单地使用一系列位操作来恢复A的值吗?

这样做的原因是我有大量的数据,在我按位计算之后,我需要对这些数据进行计数。但是我需要保留原始值,以将它们与其他值进行测试。实际数据位于堆分配非常昂贵的设备上。而且数据的长度是动态的,因此我无法声明局部变量来保存其临时值。

这可能吗?如果是这样,我该怎么办?

1 个答案:

答案 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;
}