我发现自己正在查看arc4random_uniform源代码(uniform.c)
我的问题涉及以下几行(该评论是他们最初的评论):
/* 2**32 % x == (2**32 - x) % x */
min = -upper_bound % upper_bound;现在,我不是数学天才,但是-N%N肯定总是等于零。所以为什么不直接写
min=0发布于 2015-05-28 14:30:29
首先,值得一提的是,变量是uint32_t,因此没有签名。然后让我们仔细看看:-upper_bound % upper_bound = (-upper_bound) % upper_bound;。这意味着-upper_bound实际上是upper_bound的2的补充。假设是upper_bound=10,那么-upper_bound就是0xFFFFFFF6=246。然后是-upper_bound % upper_bound = 246%10 = 6。你可以试一试。
https://stackoverflow.com/questions/30509165
复制相似问题