如果我遇到这样的事情:
uint32_t mask = 8;
uint32_t zero = 0;
uint32_t foo[16];
...
if ((foo[0] & mask) != zero)
...
条件只检查foo [0]的前8位,这是一个32位无符号整数。
如果我之前存储到foo [16]中的值与uint512变量相同,那么如何才能获得相同的条件?
由于foo [0]是向量的第一个插槽,这意味着我之前检查过第一个插槽的前8位,所以我可以简单地使用它吗?
if (("uint512 variable" & mask) != zero)
答案 0 :(得分:1)
首先,
该条件只检查foo [0]的前8位,即32位 unsigned int。
我认为你的意思是前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位。
如果要检查最重要的位:
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)
...