我刚刚开始阅读moosefs的源代码,在主函数(mfscommon / main.c)的最开头,它调用strerr_init
,其中有一个段包含2个非常大的数字,我只是不能说明那些是什么。以下是该代码的一部分:
for (n=0 ; errtab[n].str ; n++) {
hash = errtab[n].num;
disp = ((hash * 760092119) & (errhsize-1)) | 1; // number 1
hash = ((hash * 1905886897) & (errhsize-1)); // number 2
while (errhash[hash].str!=NULL && errhash[hash].num != errtab[n].num) {
hash+=disp;
hash&=(errhsize-1);
}
if (errhash[hash].str==NULL) {
errhash[hash] = errtab[n];
}
}
困扰我的数字是760092119和1905886897.由于涉及按位操作,我已将它们更改为二进制格式以便理解,但我仍然无法看透。
760 092 119 = 0b0101101010011100001010111010111
1 905 886 897 = 0b1110001100110011000011010110001