游戏开发论坛

 找回密码
 立即注册
搜索
查看: 8526|回复: 12

float型转DWORD的问题

[复制链接]

36

主题

109

帖子

111

积分

注册会员

Rank: 2

积分
111
发表于 2007-10-13 15:13:00 | 显示全部楼层 |阅读模式
今天看到一个函数,是把浮点型转成DWORD型号的,不知道正确不正确,是这样的.
void translate(DWORD & a,float b)
{
  a=*(DWORD*)&b;
}
我总感觉这样不对吧,但是书上是这么写的,我也不确定,后来我查了下浮点型的结构,发现其实他是有符号位,指数位和尾数位构成的,这样转的话我不知道编译器内部是怎么样处理指数位的内容的,我总感觉这样不妥,请大家说下.

86

主题

2251

帖子

2384

积分

金牌会员

Rank: 6Rank: 6

积分
2384
QQ
发表于 2007-10-13 20:30:00 | 显示全部楼层

Re:float型转DWORD的问题

就是把float类型的数据,原封不动地用一个DWORD类型的变量来装。DWORD数据中的每一位都和float的一样。

36

主题

109

帖子

111

积分

注册会员

Rank: 2

积分
111
 楼主| 发表于 2007-10-13 22:52:00 | 显示全部楼层

Re:float型转DWORD的问题

假如我这样用函数,DWORD data;float b=-0.5,translate(data,b);
那么得到的结果会正确吗,如果每一个位都一样的话,那么也就是说地址中的符号位和指数位都还在啊,那转换后应该是什么样的

86

主题

2251

帖子

2384

积分

金牌会员

Rank: 6Rank: 6

积分
2384
QQ
发表于 2007-10-14 09:48:00 | 显示全部楼层

Re:float型转DWORD的问题

把一个数据按位原封不动地转成其它类型,一般是为了处理上的方便,比如对float的数据不能进行位操作,就需要转成整形再操作。

2

主题

29

帖子

29

积分

注册会员

Rank: 2

积分
29
QQ
发表于 2007-10-26 16:12:00 | 显示全部楼层

Re: float型转DWORD的问题

100% 是正确的。
解释如下:

(1)DWORD*   ====>是一个指针类型(4B)(是个地址);
(2)&b       ====>b是一个float类型,就是说占(4B),且是一个地址;
//可以看到(1)与(2)都是一个4B的空间。
(3)(DWORD*)&b ====>此时的强制转换就是可以的。(此时完成的转换)
(4)*(DWORD*)&b ===>只是一个提领的操作。

103

主题

1432

帖子

1458

积分

金牌会员

Rank: 6Rank: 6

积分
1458
QQ
发表于 2007-10-26 16:58:00 | 显示全部楼层

Re:float型转DWORD的问题

个人觉得不妥.

6

主题

65

帖子

67

积分

注册会员

Rank: 2

积分
67
发表于 2007-10-26 20:23:00 | 显示全部楼层

Re:float型转DWORD的问题

测试了一下,运行没问题。
只是转换得到的数和原来的浮点数相差很远,不知道有什么用,高手来讲一下。
//测试代码:
#include <windows.h>
#include <iostream>
using namespace std;

void translate(DWORD & a,float b)
{
        a=*(DWORD*)&b;
}

void main()
{
        DWORD a[10];
        float b[10];
        int i;
       
        cout <<"before convert, 10 numbers are:"<<endl;
        for(  i = 0; i<10; ++i){
                b = i + 0.1;
                cout << b << endl;
        }
        cout << endl;

        cout << "after convert, 10 numbers are:" <<endl;
        for ( i = 0; i< 10; ++i){
                translate(a,b);
                cout << a << endl;
        }

}

/************************结果如下***************************************                                                              
before convert, 10 numbers are:
0.1
1.1
2.1
3.1
4.1
5.1
6.1
7.1
8.1
9.1

after convert, 10 numbers are:
1036831949
1066192077
1074161254
1078355558
1082340147
1084437299
1086534451
1088631603
1090623898
1091672474
************************************************************************/

86

主题

2251

帖子

2384

积分

金牌会员

Rank: 6Rank: 6

积分
2384
QQ
发表于 2007-10-26 20:39:00 | 显示全部楼层

Re:float型转DWORD的问题

记得卡马克写的开方函数里就有一例

6

主题

65

帖子

67

积分

注册会员

Rank: 2

积分
67
发表于 2007-10-26 20:48:00 | 显示全部楼层

Re: Re:float型转DWORD的问题

funcman: Re:float型转DWORD的问题

把一个数据按位原封不动地转成其它类型,一般是为了处理上的方便,比如对float的数据不能进行位操作,就需要转成整形再操作。


比如对float的转成整型进行位操作后,
还要把它转回float类型吗?
这样能保证位操作的结果有意义吗?
或者说,什么时候需要对float进行位操作

86

主题

2251

帖子

2384

积分

金牌会员

Rank: 6Rank: 6

积分
2384
QQ
发表于 2007-10-27 10:23:00 | 显示全部楼层

Re:float型转DWORD的问题

见8楼
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-6-19 22:21

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表