关于 (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 (CeSium), 信区: CPlusPlus                                     
标  题: 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);
}

 

你可能感兴趣的:(关于 (int&)a 的一些讨论)