在 PHP 源代码函数 uniqid() 有以下 C 代码:(我删除了一些类型以缩短它)
//...
struct timeval tv;
gettimeofday(&tv, NULL);
int sec = (int) tv.tv_sec;
int usec = (int) (tv.tv_usec % 0x100000);
// The max value usec can have is 0xF423F,
// so we use only five hex digits for usecs.
printf("%08x%05x", sec, usec);
//...
如果我们抛开批评,他们会尝试生成 64 位时间戳。
0xF423F可能是CLOCKS_PER_SEC - 1(CLOCKS_PER_SEC 是十进制的 1000000),
但是这个0x100000来自哪里,使用模数而不是按位和的原因是什么?