关于 (int&)a 的一些讨论

发信人: WinterFarmer (这不是马甲), 信区: CPlusPlus
标  题: 关于强制转换
发信站: 北大未名站 (2010年08月02日10:32:29 星期一), 站内信件

 

(int&)a 这个应该得到的事a的编码
问题是: (int&) 这是个组合符号吗? 比如 int(int*)这种 先转成指针再转成整形
还是 (int&)的意义就是得到实际编码

 

 

   float a1=1.0f;
   cout<< (int&)a1 <<endl;
显示的值是1.0f的编码
我的问题是 (int&) 在这里的意义是什么

 

应该是这样:

float a1 = 1.0f;                    

int *pa = (int *) &a1;
cout << *pa << endl;

或者写得更紧凑些:

float a1 = 1.0f;

cout<<*(int *) &a1<<endl;

总之 (int&)a 就相当于 *(int*)&a

 

 

 

发信人: LancerX ([1;36mC[0;37me[1;36mS[0;37mium), 信区: CPlusPlus                                     [m
标  题: Re: 关于强制转换
发信站: 北大未名站 (2010年08月02日12:56:19 星期一), 转信

这里用int&的是利用引用类型转换来防止float被直接转换成int型数输出,类似的也可以
用指针这样写:
float a1=1.0f;
int *pa=&a1;
cout << *pa << endl;

 

 

发信人: gogdizzy (平花星星#我的爱像天使守护你), 信区: CPlusPlus
标  题: Re: 关于强制转换
发信站: 北大未名站 (2010年08月03日11:22:49 星期二), 转信


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

  #ifndef Q3_VM
  #ifdef __linux__
    assert( !isnan(y) ); // bk010122 - FPE?
  #endif
  #endif
  return y; // オテオスオトハヌ1/sqrt」ィnumber」ゥ
}


int ftol(float f)
{
    int a         = *(int*)(&f);
    int sign      = (a>>31);
    int mantissa  = (a&((1<<23)-1))|(1<<23);
    int exponent  = ((a&0x7fffffff)>>23)-127;
    int r         = ((unsigned int)(mantissa)<<8)>>(31-exponent);
    return ((r ^ (sign)) - sign ) &~ (exponent>>31);
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值