我正在为一个类的装配8086项目工作,需要一种生成2个随机数的方法,一次在50和259之间,一次在50和159之间。
答案 0 :(得分:4)
对于一个班级的项目;我假设您不需要任何好处(例如,不需要用于安全性/密码学的东西,不需要担心偏见等)。
考虑到这一点;我将从BIOS中获取当前日期(“ int 0x1A,ah = 0x04”)和自午夜以来的当前价格(“ int 0x1A,ah = 0x00”);并将它们合并在一起(与XOR),以获得用于伪随机数生成器的种子。
一旦有了种子,就可以做一些数学杂技-例如将“ seed + 1”乘以较大的质数,然后将其除以稍小的质数(得到结果和余数);然后对结果,余数和原始数进行XOR运算,得到一个新种子,并返回最低的16位作为下一个随机数。
如果您确实需要做的好(而不只是工作),则需要描述需求。
无论如何;一旦有了获得“随机” 16位整数的代码,就可以将其右移或屏蔽以获取从0到255的“随机”值,然后将其加50以获得从50到305的值,然后重试如果它大于259,则最终得到的值是50到259。以同样的方式,您可以移动或屏蔽以得到0到127的值,加50,然后如果它大于159,则重试;得到一个从50到159的值。