C语言的类型转换,一个是强制类型进行转换,而在这里要介绍的是自动的数据类型的转换,自动的数据类型转换很多时候是发生在多种数据类型混合使用的时候就会进行类型的转换,这样就会带来不能控制的结果,所以必须进行学习。
1、算术进行类型转换
在进行算术运算(加减乘除、相除、大小)的时候,当数据类型不一致的时候,就会发生数据类型的转换。
if (-1 < (unsigned int)1) { printf(" -1 < (unsigned int)1 "); } else { printf(" -1 > (unsigned int)1 "); }
输出结果为:-1 > (unsigned int)1,
类型转换的准则是:占据较大字节的数据类型以他为准,其他较小字节数的数据类型全部转换为较大字节数的数据类型,当一个 int 类型与一个 char
类型的数据进行相加的时候,首先需要将 char 类型的转换int 类型(四个字节)然后再进行数据的相加。
而当出现无符号计算的时候,就需要将数据转换为无符号类型的,当 int 类型的 -1 转换为无符号的之后,就变为一个很大的正数,所以才会出现 -1 >(unsigned int)1 的情况。
而数据中,1 的数据类型没有被明确指定的话,就全部以默认为 int 类型。
2、赋值发生类型转换
进行赋值操作的时候,当两边的数据类型不一致的时候,需要将右边的数据类型转换为左边数据类型。
int a = 1; char b = 2; a = b; printf("a = %d ", a);
输出结果为: a = 2;
这里需要注意的时候,当赋值的右边的数值比左边类型的最大值大的时候,就会出现错误的数据,这里需要明确注意:
int a = 128; char b = 2; b = a; printf("b = %d ", b);
输出的结果是:b = -128.例子就是右边的数值大于 char 类型最大允许的数据范围(char 运行的范围-128~127,256个数值)。128 明显是大于 127,所以就是将128 - 127 = 1;是超过了 char 类型允许范围 1,所以就会数据就会溢出,所以输出的值,就是 -128;
总结:
数据类型转换是发生在多数据类型混合中,而转换的原则是:数据转换的方向是朝着精度更高、长度更长的方向进行转换。