关于 (int&)a 的一些讨论
2010-08-11 20:37
309 查看
发信人: 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);
}
标 题: 关于强制转换
发信站: 北大未名站 (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);
}
相关文章推荐
- (K&R小结第1篇)1.5 中关于getchar,Ctrl+Z,EOF的一些问题讨论
- 关于warning: direct base 'A' inaccessible in 'D' due to ambiguity的一些讨论
- 关于linux下sizeof(fun/*fun/&fun)的一些讨论
- C++中关于&的一些。int i 与 int &i 注意事项
- 关于&ldquo;北斗时钟&rdquo;方案的一些讨论结果
- 关于何种情况下使用DataGrid、DataList或Repeater的一些讨论(1)
- 转: 关于UI开发(总结一些技术和一些论坛牛人讨论)
- 关于何种情况下使用DataGrid、DataList或Repeater的一些讨论(1)
- iBaits中,关于insert返回值的问题(注意!!!不必写resultClass= "java.lang.Integer",方法的返回值就是int)
- 关于int *a; int &a; int & *a; int * &a
- 关于何种情况下使用DataGrid、DataList或Repeater的一些讨论
- 关于int.prase的一些解析
- 关于何种情况下使用DataGrid、DataList或Repeater的一些讨论(转)
- 关于Session的断想&PHP创建Session的一些讲解
- 关于C++中类与对象的一些讨论
- 关于UI开发(总结一些技术和一些论坛牛人讨论)
- C++Builder中关于INDY库的使用 以及一些问题的解决(E2238 Multiple declaration for 'fd_set')
- 关于指针的一些说明int*p=NULL等
- C# 中关于listview的一些讨论
- 关于何种情况下使用DataGrid、DataList或Repeater的一些讨论(1)