首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

请问如下C语言代码的意思

2012-03-07 
请教如下C语言代码的意思typedefunion{TYPEvaluestruct{unsignedintlswunsignedintmsw}parts}ieee_dou

请教如下C语言代码的意思
typedef   union
{
    TYPE   value;  
    struct  
    {
        unsigned   int   lsw;
        unsigned   int   msw;
    }   parts;
}   ieee_double_shape_type;


/*   Get   the   more   significant   32   bit   int   from   a   double.     */
#define   GET_HIGH_WORD(i,d)\
do   {\
    ieee_double_shape_type   gh_u;\
    gh_u.value   =   (d);\
    (i)   =   gh_u.parts.msw;\
}   while   (0)

/*   Set   the   less   significant   32   bits   of   a   double   from   an   int.     */
#define   SET_LOW_WORD(d,v)\
do   {\
    ieee_double_shape_type   sl_u;\
    sl_u.value   =   (d);\
    sl_u.parts.lsw   =   (v);\
    (d)   =   sl_u.value;\
}   while   (0)

用的时候:
TYPE   __kernel_sin(TYPE   x,   TYPE   y,   int   iy)
{
TYPE   z,r,v;
int   ix;
GET_HIGH_WORD(ix,x);
ix   =   ix   &   0x7fffffff;/*   high   word   of   x   */
if(ix <0x3e400000)/*   |x|   <   2**-27   */
      {if(x==0)   return   x;}/*   generate   inexact   */
z=     x*x;
v=     z*x;
r=     S2+z*(S3+z*(S4+z*(S5+z*S6)));
if(iy==0)   return   x+v*(S1+z*r);
else             return   x-((z*(half*y-v*r)-y)-v*S1);
}

不知道为什么非要用union和struct?
高手能否告诉我不用union和struct,来实现以上功能,谢谢了!

[解决办法]
通过指针强制类型转换可以直接访问
double t; *((int*)&t)这样的
[解决办法]
这样用似乎有大小端的问题。

当然可以不用union和struct的方法了,

不过需要一大堆的位操作。
[解决办法]
宏定义可以换行????
[解决办法]
换行的时候是不是应该在行尾加一个斜杠\啊?
[解决办法]
有斜杠的 只是离的比较远 哈哈
[解决办法]
这个问题其实不太好,你应该学习为什么要用struct和union,而不是学习不用他们怎么写代码.

因为不用它们会带来很多问题不好处理,而这些问题没有讨论的价值.

就象你想用C代码实现C++的类的多态一样,没有多大意义.
[解决办法]
在一个union里面用struct包括大小两端参数 这样用是最方便的啊
有这么一个好的东西,方便简洁,为什么又不用呢?

拆开union 就比较麻烦
[解决办法]
我觉得咱们看也不是endian的问题呀,别人这个好像是一个将浮点运算转为整数运算的。
[解决办法]
CSDN论坛有点龊,贴个代码,缩进全没了,这样的论坛不适合讨论代码。。。
[解决办法]
to:plusboy()
这是CSDN的老毛病了,可是没有看到CSDN有要解决这个问题的意思。他们更热衷于“升级”一些花里胡哨的东西。

热点排行