gpt4 book ai didi

c - 模数运算符与零(重新 : arc4random_uniform source)

转载 作者:太空狗 更新时间:2023-10-29 17:11:03 31 4
gpt4 key购买 nike

发现自己正在查看 arc4random_uniform 源 ( http://bxr.su/o/lib/libc/crypt/arc4random_uniform.c )

我的问题涉及以下行(评论是他们的原始评论):

/* 2**32 % x == (2**32 - x) % x */
min = -upper_bound % upper_bound;

现在,我不是数学天才,但肯定 -N%N 永远等于零。那为什么不直接写

min=0

最佳答案

重要的是要注意,我们在这里处理的是无符号整数 (uint32_t),因此 -upper_bound 并不像您认为的那样。它实际上是 2**32 - upper_bound,由于模环绕,其目的在上面的评论中解释(即获得 2**32 % upper_bound没有溢出)。

例子:

#include <stdio.h>
#include <stdint.h>

int main()
{
uint32_t upper_bound = 42;
uint32_t min = -upper_bound % upper_bound;
printf("%u -> %u\n", upper_bound, min);
return 0;
}

给出:

42 -> 4

LIVE CODE

关于c - 模数运算符与零(重新 : arc4random_uniform source),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30509165/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com