C++ 类型转换

C++类型转换:

C++ 类型转换

  1. 赋值时的自动类型转换:如果赋值复运算符两侧的类型不一致,遵循以下几条原则进行类型转换后赋值。

    ⑴实型量赋给整型变量:实行量赋给整型变量时,简单舍弃小数部分,将实型量的整数部分赋给整型变量,且不会进行四舍五入。

    ⑵整型量赋给实型变量:整型量赋给实型变量时,数值不变,有效数字位数增加。如float f=23,则f的值为23.0,已单精度浮点格式存储,具有6~7位有效数字;double e=23,则e的值为23.0,以双精度浮点格式存储,具有15~16位有效数字。

    ⑶整型量之间的赋值:整型变量一共有8中,分别是[signed] cha r,unsigned char ,[signed] short ,unsigned short ,[signed] int ,unsigned int ,[signed] long ,unsigned long。将char型量看作是1个字节长度的整型量。各种类型的整型量所占用的字节数是不同的,按照其二进制位数的多少,区分为“长的”整型量和“短的”整型量。
            Ⅰ“长的”整型量赋给“短的”整型量:方法位 低位截断,将“长的”整型量的高位去掉,截取其与“短的”整型量相同位数的低位二进制位,然后进行赋值。如char=250。250为int型常量,在内存中的存储形式是32为二进制数0000 0000 0000 0000 0000 0000 1111 1010。变量c是8位有符号二进制整型量,赋值原则为取250内存数据的低8为赋给c,此时c中的值为1111 1010。C++中整型量是以补码的形式存放的,因此,变量c的真值是-6(书上是这样写的,真值的概念我觉得有点模糊,强制类型转换(int)c是等于-6的)。如果给的数过大,超过了其"短的"的位数,就会发生赋值溢出。
            Ⅱ“短的”整型量赋值给“长的”整型量。
                    ⅰ“短的”无符号整型赋值给“长的”整型量:在“短的”无符号整型量前补0,使其长度达到“长的”整型量的位数。
                    ⅱ“短的”有符号整型量赋值给“长的”整型量:这种情况需要做符号位扩展,即在“短的”整型量前补符号位的数,使其长度达到“长的”整型量的位数,然后赋值。(正数前面补0,负数前面补1。)

2. 各种类型运算量混合运算时的自动类型转换。
规则是由低类型向高类型转换,然后运算。具体转换规则如下图:
C++ 类型转换
3. 强制类型转换
     格式:
     <类型名>(<表达式>) 或 (<类型名>) <表达式>
    例如:
    int i,a;
    float x,y;
    double z;
    i = int (x+y); 或 i = (int)(x+y);
     z = double (a) ; 或 z = (double)a;
    a = int(z)%i; 或 a=(int)z%i; 强制类型转换的优先级比较高
Tips:类型强制转换的对象是表达式的值,如表达式double(a)的意义是将a的值(及表达式的值)转换称为double型,而变量a自身仍为int型变量。