我有一个严格的内存限制,不允许我分配堆内存,也不允许在堆栈上使用局部变量执行以下位操作。
我有两个整数值AB(假设它们只是两个字节的值)。我想知道A & B的结果是什么(例如通过A &= B),然后将A的原始值还原为A
由于不允许额外的内存,我不能临时存储A的原始值。我可以简单地使用一系列位操作来恢复A的值吗?
原因是我有一个很大的数据数组,我需要按位计算后的位,然后再计算。但我需要保留原始值,以便与其他值进行比较。实际数据位于堆分配非常昂贵的设备上。而且数据的长度是动态的,所以我不能声明一个局部变量来保存它的临时值。
这可能吗?如果是,我该怎么做?

最佳答案

您似乎认为需要复制整个数组,修改该副本,然后对其执行操作。那是不必要的。
对于数组的每个元素,calucateA & 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;
}

10-07 13:34
查看更多