我在GTMHTTPFetcher.m的gtm-http-request中看到以下行:
// set min interval to a random value between 1.0 and 2.0 seconds
minRetryInterval_ = 1.0 + ((double)(arc4random() & 0x0FFFF) / (double) 0x0FFFF);
为什么除法运算符的两个操作数都被强制转换为double
?
& 0x0FFFF
做了什么?
这是否独立于系统的endianness?
我们如何确保0x0FFFF
总是大于arc4random() & 0x0FFFF
?如果系统使用两个赞美怎么办?
答案 0 :(得分:0)
除了double
minRetryInterval_
是NSTimeInterval
之后,除法运算符的两个操作数都被强制转换为typedef double
。也许,将它们转换为NSTimeInterval
代替它们可能更有意义。
& 0x0FFFF
生成u_int32_t
生成的随机unsigned int
的最右边16位,即arc4random()
的所有内容。
是的,这应该独立于系统的字节顺序,因为分母0x0FFFF
是最大可能的16位double
,因此,商总是小于或等于到1。
double
的最高位是sign bit。在这种情况下,两个符号位都是0,所以我们可以确定商是正的。此外,根据double
的规范,0x0FFFF
的幅度大于0x0FFFE
,例如。