Если бы я встретил что-то вроде этого:Используйте маски для оценки бит uint512
uint32_t mask = 8;
uint32_t zero = 0;
uint32_t foo[16];
...
if ((foo[0] & mask) != zero)
...
условия просто проверяет первые 8 бит обув [0], который представляет собой 32-битовое беззнаковое внутр.
Если у меня есть то же значение, ранее сохраненное в foo [16], теперь в переменной uint512, как я могу получить такое же условие?
Поскольку foo [0] - первый слот вектора, это означает, что я предварительно проверил первые 8 бит первого слота, поэтому могу ли я просто использовать это?
if (("uint512 variable" & mask) != zero)
Состояние * не * Проверьте первый 8 бит 'foo [0]', он проверяет бит 4. Если вы хотите проверить 8 первых бит, используйте, например, '0xff'. –
Какой тип 'uint512'? 512-битное целое без знака? –
Кроме того, хотя полезно избегать «магических чисел», сравнение бит-операции с * literal * zero (то есть '0') обычно приемлемо. Использование * переменных * для констант, таких как нуль, в будущем заработает вам место на http://thedailywtf.com/ –