C++ 类型转换
C++类型转换:
-
赋值时的自动类型转换:如果赋值复运算符两侧的类型不一致,遵循以下几条原则进行类型转换后赋值。
⑴实型量赋给整型变量:实行量赋给整型变量时,简单舍弃小数部分,将实型量的整数部分赋给整型变量,且不会进行四舍五入。
⑵整型量赋给实型变量:整型量赋给实型变量时,数值不变,有效数字位数增加。如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. 各种类型运算量混合运算时的自动类型转换。
规则是由低类型向高类型转换,然后运算。具体转换规则如下图:
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型变量。