0

我在gtm-http-request的GTMHTTPFetcher.m中看到了以下行:

// set min interval to a random value between 1.0 and 2.0 seconds
minRetryInterval_ = 1.0 + ((double)(arc4random() & 0x0FFFF) / (double) 0x0FFFF);
  1. 为什么除法运算符的两个操作数都被强制转换为doubles?

  2. 做什么的& 0x0FFFF

  3. 这是否独立于系统的字节序

  4. 我们如何确定它0x0FFFF总是大于arc4random() & 0x0FFFF?如果系统使用二的恭维怎么办?

4

1 回答 1

0
  1. 除法运算符的两个操作数都被强制转换为doubles 因为minRetryInterval_is an NSTimeInterval, which is of typedef doubleNSTimeInterval也许,将它们都转换为s可能更有意义。

  2. 除了& 0x0FFFF最右边的 16 位随机数之外,其他所有位都归零u_int32_t,即unsigned int由 生成arc4random()

  3. 是的,这应该独立于系统的字节序,因为分母0x0FFFF是最大可能的 16 位double,因此,商将始终小于或等于 1。

  4. a 的最高有效位double符号位。在这种情况下,两个符号位都是 0,所以我们可以确定商是正数。此外,根据 的规范,例如,double0x0FFFF幅度上大于。0x0FFFE

于 2011-06-29T13:56:12.657 回答