(1)C语言中的变量类型的转换分为显示类型转换和隐式类型转换:
eg: int i=12.125//隐式类型的转换,一般会有warning;
int i=(int)12.125//显示类型的转换,不会有warning;
(2)C语言如何实现强制转换的?(eg:实现float_to_int函数)
首先附上代码:#include<stdio.h>
#include<stdlib.h>
int float_to_int(float f)
{
int temp=*(int*)&f;
//分离此浮点数的符号位
int sign;
if((temp>>=31)=0)
{
sign=1;
}
else
{
sign=-1;
}
//分离此浮点数的指数位
int exp;
exp=(temp&0x7f800000)>>23-127;
//分离此浮点数的尾数位
int tail;
tail=temp&0x007fffff;
int res=tail>>(23-exp);
res|=(1<<exp);
return sign*res;
}
int main()
{
printf("%d\n",float_to_int(12.5));
return 0;
}
在实现float_to_int的例子转换中要注意到以下几点:
1)有关浮点数在计算机内存储的表示方法
符号位(1位)
指数位(8位)
尾数位(23位)
eg:12.5->1101.1(二进制)=1.1011*2^3(科学记数法表示)
符号位:0(0为正1为负)
指数位:(3+127)转换为二进制10000010
尾数位:去掉科学记数法表示的数字乘法左边的数字位的小数点左边的1;然后再后边补0补够23位即可
10110000000000000000000
值得注意的是:在写求指数位时需得用计算机求出的-127才是真正的指数;
2)有关位运算的运算符及技巧