Если бы я встретил что-то вроде этого:
uint32_t mask = 8;
uint32_t zero = 0;
uint32_t foo[16];
...
if ((foo[0] & mask) != zero)
...
условие просто проверяет первые 8 бит foo [0], который является 32-битным беззнаковым int.
Если у меня есть то же значение, ранее сохраненное в foo [16], теперь в переменной uint512, как я могу получить такое же условие?
Так как foo [0] является первым слотом вектора, это означает, что я предварительно проверил первые 8 бит первого слота, поэтому могу ли я просто использовать это?
if (("uint512 variable" & mask) != zero)
Прежде всего,
условие просто проверяет первые 8 бит foo [0], который является 32-битным беззнаковым int.
Я думаю, вы имеете в виду первые 32 бита - foo[0]
- это первый элемент, который является 32-битным держателем.
Предполагая, что есть uint512
, я не понимаю, чего именно вы хотите достичь, но я думаю, что это одна из двух вещей:
Проверьте все uint512 как единый объект, используя 512-битную маску следующим образом:
uint512_t mask = 8;
uint512_t zero = 0;
uint512_t foo;
...
if ((foo & mask) != zero)
...
Проверьте 8-разрядный срез 512-битной переменной. В этом случае вы не можете просто получить его как версию массива. Это связано с тем, что в зависимости от конечности целевой машины первые 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)
...
foo[0]
, оно проверяет только бит 4. Если вы хотите проверить 8 первых бит, то используйте, например,0xff
.uint512
? 512-битное целое число без знака?