使用掩码来评估uint512的位

时间:2014-12-28 14:41:47

标签: c++ operators bit

如果我遇到这样的事情:

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)

1 个答案:

答案 0 :(得分:1)

首先,

  

该条件只检查foo [0]的前8位,即32位   unsigned int。

我认为你的意思是前32位 - foo[0]是第一个32位持有者。

假设有uint512,我不明白你想要完成什么,但我认为这是两件事之一:

  1. 使用512位掩码将所有uint512检查为单个实体,如下所示:

    uint512_t mask = 8;
    uint512_t zero = 0;
    uint512_t foo;
    ...
    if ((foo & mask) != zero)
    ...
    
  2. 检查512位变量的8位片。在这种情况下,你不能简单地得到它作为数组版本。这是因为根据目标机器的字节顺序,第一个8位可能是最重要的或最不重要的8位。

  3. 如果要检查最重要的位:

    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)
    ...