请问上述代码中第 135 行是什么含义?
我理解这行代码的目的应该是想得到一个可以被 n 整除的最大值,使得最终生成的随机数是等概率的。
那么我是否可以将这行代码由:
max := int32((1 << 31) - 1 - (1<<31)%uint32(n))
替换为:
max := int32((1 << 31) - 1 - ((1 << 31) - 1)%uint32(n) - 1)
请万能的 V 友指点。
1 AoEiuV020 2021-06-16 10:32:28 +08:00 不明觉历,这前后不等价吧,把 n=(1<<31)代入算一下? |
2 AoEiuV020 2021-06-16 10:44:45 +08:00 |
![]() | 3 mainjzb 2021-06-16 11:22:00 +08:00 你的理解是对的,你的替换代码是错的 代入 n=100, 得 max=2147483599 |
![]() | 4 mainjzb 2021-06-16 11:22:36 +08:00 你的理解是对的,你的替换代码是错的 代入 n=100, 得 max=2147483599 max 的值是[0,2147483599] 正好是 2147483600 个数字 |
![]() | 5 mainjzb 2021-06-16 11:28:21 +08:00 前面-1 是因为他要算入 0 这个数字,后面正常思考就行 int32((1 << 31) - 1) = [0, 2147483647] max = [0, 2147483647 - (2147483648%n)] |
![]() | 6 lujjjh 2021-06-16 11:59:42 +08:00 > 我理解这行代码的目的应该是想得到一个可以被 n 整除的最大值 其实是得到一个最大的 max 使得 n | (max + 1),因为这里 max 是可以取到的。 也可以改成 max := (1<<31) - (1<<31)%uint32(n) ... for uint32(v) >= max { |