代码之家  ›  专栏  ›  技术社区  ›  TheRealLife

arc4random_uniform()的奇怪结果。发生了什么事

  •  1
  • TheRealLife  · 技术社区  · 6 年前

    昨天我有以下代码:

    NSInteger test = arc4random_uniform(10)-5;
    

    若我通过调试器检查测试内部的内容,有时它不是一个介于-5和5之间的数字。 有时它是一个随机的大整数。

    在我将代码更改为以下内容后:

    NSInteger test = arc4random_uniform(10);
    test -= 5;
    

    我对C和Nealy的新内容很在行,我只写C/C++。但这对我来说毫无意义。

    有人能解释一下发生了什么事吗?

    1 回复  |  直到 6 年前
        1
  •  3
  •   danh    6 年前

    arc4Random函数族返回 u_int32_t . “u_u2;”表示无符号,并用文本确定表达式的类型 5 UINT_MAX .

    第二个表达式首先将随机数强制转换为有符号整数,因此后续的减法工作正常。