我在我的软件中做了很多位向量操作。例如:假设我需要存储有关候选人“n”的布尔信息,我执行以下操作:
uint64_t *information_vector;
uint32_t pos = n / 64;
uint32_t bit_pos = n % 64;
information_vector[pos] |= (1 << bit_pos);
我在阅读该信息时遵循类似的程序:
uint32_t pos = n / 64;
uint32_t bit_pos = n % 64;
if (information_vector[pos] & (1 << bit_pos)) {
// do something
}
同时,我还将information_vector写入磁盘并再次读取。现在,我正在尝试解决一个让我做噩梦的错误,让我觉得 Endianess 可能是这里的罪魁祸首,但我无法解释。有什么办法可以查吗?这种位向量操作通常是安全的并且跨架构吗?
我还看到,在代码的某处,我在另一个位向量中为同一候选者设置了一些其他信息:
uint8_t byte_position = n / 8;
uint8_t bit_position = n % 8;
another_information_vector[byte_position] |= (1 << bit_position);
我通常通过对这些位向量进行与运算来找到一组共同的属性。