逆向基础13:联合体
来源:互联网 发布:广州企业名录数据库 编辑:程序博客网 时间:2024/06/06 15:40
19.1 伪随机数生成器的例子
如果我们需要0~1的随机浮点数,最简单的方法就是用PRNG(伪随机数发生器),比如马特赛特旋转演算法可以生成一个随机的32位的DWORD。然后我们可以把这个值转为FLOAT类型,然后除以RAND_MAX(我们的例子是0xFFFFFFFF),这样,我们得到的将是0..1区间的数。 但是如我们所知道的是,除法很慢。我们是否能摆脱它呢?就像我们用乘法做除法一样(14章)。 让我们想想浮点数由什么构成:符号位、有效数字位、指数位。我们只需要在这里面存储一些随机的位就好了。 指数不能变成0(在本例里面数字会不正常),所以我们存储0111111到指数里面,这意味着指数位将是1。然后,我们用随机位填充有效数字位,然后把符号位设置为0(正数)。生成的数字将在1-2的间隔中生成,所以我们必须从里面再减去1。 我例子里面是最简单的线性同余随机数生成器,生成32位(译注:32-bit比特位,非数字位)的数字。PRNG将会用UNIX时间戳来初始化。 然后,我们会把float类型当作联合体(union)来处理,这是一个C/C++的结构。它允许我们把一片内存里面各种不同类型的数据联合覆盖到一起用。在我们的例子里,我们可以创建一个union,然后通过float或者uint32_t来访问它。因此,这只是一个小技巧,而且是很脏的技巧。
清单19.1: MSVC 2010 (/Ox)
本文链接地址: http://www.dbgpro.com/archives/524.html
0 0
- 逆向基础13:联合体
- C语言基础-联合体
- 逆向基础
- iphone逆向专题--逆向基础
- [Android逆向]-Android逆向基础
- 联合体
- 联合体。。。
- 联合体
- 联合体
- 联合体
- 联合体
- 联合体
- 联合体
- 联合体
- 联合体
- 联合体
- C语言基础-结构体和联合体
- C语言基础-结构体和联合体
- URI和URL的区别
- linux-centos 为什么crond执行完没有了邮件日子通知?
- Linux下Nginx快捷启动关闭设置
- 1
- 【Leetcode】242. Valid Anagram
- 逆向基础13:联合体
- 掉电时钟保存main函数
- 2
- 大数据初接触
- linux串口驱动分析
- 51单片机60秒倒计时
- 魔方公式总结
- 推荐系统开源软件列表汇总和点评(转)
- java修饰符