使用掩码计算 uint512 的位

Use masks to evaluate bits of a uint512

本文关键字:uint512 的位 计算 掩码      更新时间:2023-10-16

如果我遇到这样的事情:

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,我不明白你到底想完成什么,但我认为这是两件事之一:

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

    uint512_t mask = 8;
    uint512_t zero = 0;
    uint512_t foo;
    ...
    if ((foo & mask) != zero)
    ...
    
  2. 检查 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)
...