pg1*_*989 0 c hash bit-manipulation
我一直试图解析它们几天,我不能理解它.他们来了:
int left = S->buflen >> 3;
int fill = 64 - left;
if(left && (((datalen >> 3) & 0x3F) >= (unsigned)fill)){
some code here
}
Run Code Online (Sandbox Code Playgroud)
如果有帮助,这是SHA-3候选BLAKE256的参考实现.
没有bitops的替代方案可能有助于澄清意义:
int left = S->buflen / 8;
int fill = 64 - left;
if (left != 0) {
int tmp = datalen / 8;
if ((tmp % 64) >= (unsigned)fill) {
/* Some code here */
}
}
Run Code Online (Sandbox Code Playgroud)
这当然假设buflen并且datalen是非负的,因为右移运算符具有负数的平台相关行为.