VC中的隐式转换 一般是隐藏的错误

来源:互联网 发布:java如何获取访问者ip 编辑:程序博客网 时间:2024/05/02 04:21

举例:

unsigned short  uTemp ;

double dTemp ;

double * pTemp = dTemp*uTemp; 可能出错 有可能本来是很小的数据结果变成非常大的数据

正确的写法是:double * pTemp = dTemp*(double)uTemp; 可能出错


unsigned short uResult = 0;

if (dTemp<0) //如果一个double数据有可能是负数,但是需要赋值给一个无符号变量,可以尝试将小于0的置0;

{
dTemp= 0;
}
uResult = dTemp;

否则,如果强制uResult  = (unsigned short)dTemp;   

此时if(-1<dTemp<0) ,(unsigned short)dTemp;实际计算机输出是0;

if(dTemp<-1) ,(unsigned short)dTemp;实际计算机输出-1的补码,比如如果dTemp;是-1,(unsigned short)dTemp就等于了65535之,一个很大的数据。是错误的




举例1:

double dTemp1 = -0.002;
unsigned short dTemp2= 100;
double dTemp3 = dTemp1 * dTemp2;// dTemp3的值是-0.2
unsigned short dTemp4 = dTemp3;//dTemp4的值是0


举例2:

double dTemp1 = -0.01;
unsigned short dTemp2= 100;
double dTemp3 = dTemp1 * dTemp2;// dTemp3的值是-1
unsigned short dTemp4 = dTemp3;//dTemp4的值是65535


举例3:

double dTemp1 = -0.02;
unsigned short dTemp2= 100;
double dTemp3 = dTemp1 * dTemp2;// dTemp3的值是-2
unsigned short dTemp4 = dTemp3;//dTemp4的值是65534













题外话:定义指针并初始化

double *pTemp;

pTemp = new double[100];

memset(pTemp, 0, 100*sizeof(double));


0 0