首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >'*(<type> *) &x‘和'x’有什么区别?

'*(<type> *) &x‘和'x’有什么区别?
EN

Stack Overflow用户
提问于 2013-05-20 16:13:50
回答 3查看 1.1K关注 0票数 4

它们之间的区别是什么

代码语言:javascript
复制
int i = 123;
int k;
k = *(int *) &i;
cout << k << endl; //Output: 123

代码语言:javascript
复制
int i = 123;
int k;
k = i;
cout << k << endl; //Output: 123

它们都给出相同的输出,但有什么不同吗?

(我在快速反平方根的Quake3代码中找到了第一个代码片段)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-05-20 16:23:28

在Q3中:

代码语言:javascript
复制
float Q_rsqrt( float number )
{
    long i;
    float x2, y;
    const float threehalfs = 1.5F;

    x2 = number * 0.5F;
    y  = number;
    i  = * ( long * ) &y;                       // evil floating point bit level hacking
    i  = 0x5f3759df - ( i >> 1 );               // what the fuck?
    y  = * ( float * ) &i;
    y  = y * ( threehalfs - ( x2 * y * y ) );   // 1st iteration
//  y  = y * ( threehalfs - ( x2 * y * y ) );   // 2nd iteration, this can be removed

    return y;
}

据我所知,您对下面这行很感兴趣:

代码语言:javascript
复制
    i  = * ( long * ) &y;

yfloatilong。因此,它是作为整数位模式的浮点位模式的reinterpretation

票数 6
EN

Stack Overflow用户

发布于 2013-05-20 16:19:51

这完全取决于i是对象类型还是原始类型。如果它是一个对象,operator*可能会被重载,从而给出不同的整体含义。

票数 2
EN

Stack Overflow用户

发布于 2013-05-20 16:17:40

不,没有区别,这两种赋值本质上都是从存储int的存储器中将i的位值复制到存储k的存储器中。

有时,当源变量和目标变量的类型不同时,会使用这样的技巧,但这只是int的简单int

我认为,一个足够聪明的编译器应该为两个版本生成完全相同的代码。

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

https://stackoverflow.com/questions/16645233

复制
相关文章

相似问题

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