使用掩码计算 uint512 的位
Use masks to evaluate bits of a uint512
如果我遇到这样的事情:
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 位。
如果要检查最高有效位:
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)
...
相关文章:
- 在java中读取c++字节的位字段
- 如何进行特定的位操作?
- CreateDIBSection为同一图像返回不一致的位图位值
- 使用 int 指针的浮点数的位表示形式
- 不带连续 1 的位字符串,使用自上而下的 DP
- 在有符号基础类型枚举的位域上溢出
- 从 C++ 中的位表示形式初始化字符
- 无法初始化以 std::byte 作为成员类型的位字段
- 用C++压缩内存中的位图
- XQueryPointer 的 mask_return 值中的位表示哪些键?
- 哪些是互斥的:位字段还是格式化标志?在c++中
- C++gdi::内存中的位图到PNG图像
- 无符号和有符号短整型的位宽
- 如何将内存中的位转换为一串和零?
- 将 1 添加到 32 位的位集
- LoadImage 函数不适用于 ImageMagick 创建的位图图像
- 循环访问 C++ 个字符数组的位
- 在没有查找表的情况下计算大数的位长度
- 将大端格式的位融合为预期的十进制值,同时忽略第一个位
- 使用掩码计算 uint512 的位