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ますか?システムが2つの褒め言葉を使用する場合はどうなりますか?

4

1 に答える 1

0
  1. はであるため、除算演算子の両方のオペランドはdoublesにキャストされています。おそらく、代わりに両方をsにキャストする方が理にかなっているかもしれません。minRetryInterval_NSTimeIntervaltypedef doubleNSTimeInterval

  2. & 0x0FFFFゼロは、ランダムの右端の16ビットを除くすべてをゼロにします。u_int32_tつまり、unsigned intによって生成されarc4random()ます。

  3. はい、これはシステムのエンディアンとは無関係に機能するはずです。これは、分母0x0FFFFが可能な最大の16ビットdoubleであるため、商は常に1以下になるためです。

  4. aの最上位ビットはdouble符号ビットです。この場合、両方の符号ビットが0であるため、商が正になることを確認できます。また、の仕様によればdouble、は、たとえば、0x0FFFFよりも大きさが大きくなります。0x0FFFE

于 2011-06-29T13:56:12.657 に答える