首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RarePackFour智能契约如何从给定的随机数生成新的“唯一”数字?

RarePackFour智能契约如何从给定的随机数生成新的“唯一”数字?
EN

Stack Overflow用户
提问于 2022-02-20 11:19:29
回答 1查看 30关注 0票数 0

我试图理解RarePackFour智能合同从游戏神解开。我注意到他们使用一个随机数来生成其他的“随机”(括号中是因为我不认为新生成的数字是随机的)。这是我想要理解的代码。你能帮我理解一下这里发生了什么吗?

代码语言:javascript
复制
function extract(uint random, uint length, uint start) internal pure returns (uint) {
        return (((1 << (length * 8)) - 1) & (random >> ((start * 8) - 1)));
    }

对我来说,按位运算符并不是真正的强项,所以如果您能够帮助理解代码中正在发生的事情,这将是非常有帮助的。

EN

回答 1

Stack Overflow用户

发布于 2022-02-20 16:14:40

让我们来举个例子:

代码语言:javascript
复制
length = 1
start = 1
random = 3250 # Binary: 0b110010110010

1. ((1 << (length * 8)) - 1) = 2^8 - 1 = 255 = 0B11111111 # Binary

2. (random >> ((start * 8) - 1))) = 0b110010110010 >> 7 = 0B11001 # Decimal 25


0B11111111 & 0B11001 = 0B11001 = 25

通常,如果length * 8 > ((start * 8) - 1),则函数返回random / (start * 8 - 1)。注意,它只是实体中的整数计算。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71193853

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档