编程小技巧

    返回首页    发表留言
本文作者:李德强
          技巧十六:基本类型转换
 
 

        今天跟大家分享的小技巧是关于基本数据类型的转换转换的。

        1、整型变量字节数少的类型转为字节数多的类型,例如:将一个char型变量转为short型,或将一个short型变量转为long型:

char ch = 13;
short sh = (short)ch;
long lo = (long)sh;

        在字节数少的类型转A为字节数多的类型B时,编译器会将A低位的数值复制到B的低位内存中,而B的高位内存则置为0,如果A和B都是有符号型变量,并且A是一个负数,则B的最高位为1,表示负数。比如上面例子中将char转换为short和将short转换为long之后,ch==13、sh==13、lo==13:

        2、整型变量字节数多的类型转换为字节数少的类型,例如将long转为short,将short转为char:

long lo = 741980;
short sh = (short)lo;
char ch = (char)sh;

        在字节数多的类型转A为字节数少的类型B时,编译器会将A低位的数值复制到B的低位内存中,而将A的高位内容忽略掉。如果A和B都是有符号型变量,并且A是一个负数,则B的最高位为1,表示负数。比如上面例子中将long转换为short和将short转换为char之后lo == 741980、sh == 21084、ch == 92:

        3、单精度浮点与双精度浮点数类型转换:

        与整型变量的类型转换不同,浮点数的单双精度之间的类型转换的结果是“相同”的,这里的“相同”指的是高位数值相同,但小数点后的精度不同,例如:

float flo = 123.456;
double dou = (double)flo;

        执行完上面的语句后,flo的值为123.4560而dou的值为123.456001281738,他们高位的值是一样的,double类型的变量精度比float类型的变量精度更高。

float flo = 123.456;
double dou = (double)flo;

        执行完上面语句后,flo的值为123.45678而dou的值为123.456789123457,他们高位的值是一样的,double类型的变量精度比float类型的变量精度更高。

        对于浮点数的类型转换时除了精度上的不同之外,基本上没有其它的内容丢失,而浮点类型变量值转换的过程是通过编译器来完成的,也就是说编译器首先计算出浮点数变量的值然后再把这个值赋值给另一个精度的浮点数。

        4、整型变量与浮点数类型转换:

        整型变量与浮点数类型转换中与单双精度的浮点数类型转换类似,编译器首先计算出浮点数变量的值然后再把这个值赋值给另一个类型的变量。在赋值的过程中都是采用高位赋值,低位舍弃的原则,例如:

float flo = 923.456;
char ch = (char)flo;

long lo2 = 1688949340;
float flo2 = (float)lo2;

        执行完上面语句之后,ch的值为-101,flo的整数位保留,小数位舍弃,值为923,而将923(0000 0011 1001 1011)赋值给ch时,高位舍弃,低位赋值给ch(遵循整型变量的转换原则)结果为1001 1011,它的最高位为1,表示它是一个负数,对其取反再加一,结果为-101。

        而对于long转换为float类型,则直接将数值赋值到变量flo2中,但结果为1688949376.000000因为float的精度最高只有7位,所以原来整数中的个位、十位和百位数值都丢失了。

    返回首页    返回顶部
  看不清?点击刷新

 

  Copyright © 2015-2018 问渠网 辽ICP备15013245号