如果我遇到这样的事情:
uint32_t mask = 8;
uint32_t zero = 0;
uint32_t foo[16];
...
if ((foo[0] & mask) != zero)
...
该条件仅检查foo [0]的前8位,这是一个32位无符号int。
如果我以前将相同的值存储在foo [16]中,现在又存储到uint512变量中,如何获得相同的条件?
由于foo [0]是向量的第一个插槽,这意味着我之前已经检查了第一个插槽的前8位,所以我可以简单地使用它吗?
if (("uint512 variable" & mask) != zero)
最佳答案
首先,
条件只检查foo [0]的前8位,即32位
无符号整数。
我认为您的意思是前32位-foo[0]
是第一个元素,它是32位持有人。
假设有uint512
,我不明白您要完成什么,但是我认为这是两件事之一:
使用512位掩码将所有uint512作为单个实体进行检查,如下所示:
uint512_t mask = 8;
uint512_t zero = 0;
uint512_t foo;
...
if ((foo & mask) != zero)
...
检查512位变量的8位切片。在这种情况下,您不能简单地获取它们的数组版本。这是因为取决于目标计算机的字节序,前8位可能是最高有效8位或最低有效8位。
如果要检查最高有效位:
uint32_t mask = 8;
uint32_t zero = 0;
uint512_t foo;
...
if ((uint32_t)(foo >> 480) & mask) != zero)
...
如果要检查最低有效位:
uint32_t mask = 8;
uint32_t zero = 0;
uint512_t foo;
...
if (((uint32_t)foo & mask) != zero)
...
关于c++ - 使用掩码评估uint512的位,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27677412/