不同数据类型的揭秘存储大小和值范围是不一样的,程序在初始化的语言类时候就已经设定了,例如:
int a = 9; float b = 8.5;a,型转b占的发生字节大小不一样,这个我们应该都知道,揭秘在C语言中一个表达式允许不同类型的语言类数据进行运算,例如:
int a = 9; float b = 8.5,型转c; c = a + b;因为计算机硬件在进行算术操作时,发生要求各操作数的揭秘类型具有相同的存储位数以及一样的存储方式,所以就出现了类型转换。语言类
对于某些类型的型转转换,编译器可以隐式地自动进行,发生这种转换称为自动类型转换;
而有些类型转换需要程序员显式指明,揭秘那么通常把这种转换称为强制类型转换。语言类
自动转换是型转在源类型和目标类型兼容以及目标类型广于源类型时发生一个类型到另一类的转换。我们先来看一段代码:
//vs2019 //来源:技术让梦想更伟大 //作者:李肖遥 #include <stdio.h> int main() { //定义一个整型指针变量pPoint int* pPoint; //定义基本的数据的类型 char c; short s; int i; long l; float f; double d; //将整型浮点型数据赋值给指针类型 pPoint = c; pPoint = s; pPoint = i; pPoint = l; pPoint = f; pPoint = d; return 0; }由于指针变量和整型、浮点这些数据型的类型是不能相互赋值的,云服务器提供商编译报错输出:
那么我们把同类型数据类型进行运算后赋值呢?
//vs2019 //来源:技术让梦想更伟大 //作者:李肖遥 #include <stdio.h> int main() { //定义一个整型指针变量pPoint int* pPoint; //定义基本的数据的类型 char c; short s; int i; long l; float f; double d; //将整型浮点型数据运算之后赋值给指针类型 pPoint = c + c; pPoint = s + s; pPoint = i + i; pPoint = l + l; pPoint = f + f; pPoint = d + d; return 0; } char同类型运算,结果是一个int类型。 short同类型运算,结果是一个int类型。 int同类型运算,结果是一个int类型。 long同类型运算,结果是一个long类型。 float同类型运算,结果是一个float类型。 double同类型运算,结果是一个double类型。如下图所示:
那么我们把不同类型数据类型进行运算后赋值呢?
//vs2019 //来源:技术让梦想更伟大 //作者:李肖遥 #include <stdio.h> int main() { //定义一个整型指针变量pPoint int* pPoint; //定义基本的数据的类型 char c; short s; int i; long l; float f; double d; //将整型浮点型数据混合运算赋值给指针类型 pPoint = c + s; // char + short = int pPoint = c + i; // char + int = int pPoint = c + l; // char + long = int pPoint = c + f; // char + float = long pPoint = c + d; // char + double = float return 0; } char类型与short类型运算,结果是一个int类型。 char类型与int类型运算,结果是网站模板一个int类型。 char类型与long类型运算,结果是一个long类型。 char类型与float类型运算,结果是一个float类型。 char类型与double类型运算,结果是一个double类型。结果如下图所示:
int -> unsigned int -> long -> unsigned long -> long long -> unsigned long long
浮点型级别从低到高依次为:float -> double
强制类型转换是通过类型转换运算来实现的。其一般形式为:
(类型说明符) (表达式)
其作用就是把表达式的运算结果强制转换成类型说明符所表示的类型的值。
//vs2019 //来源:技术让梦想更伟大 //作者:李肖遥 #include<stdio.h> #include<string.h> int main() { float f,x=1.3,y=1.4; int i = 4,a,b; a = x + y; b = (int)(x+y); f = 10/i; printf("a=%d,b=%d,f=%f,x=%f,y=%f\n",a,b,f,x,y); }运行结果如下:
我们从中可以看到,虽然x,y变强制转换int型,但是最后输出的值不变,强制类型转换没有影响x和y变量原本的类型。而上图警告已经说明了一切。
注意:在C语言中,对一个变量赋值的时候,这个变量初始定义的类型包含了两层含义:
这个数据类型表示的内存空间的大小。 编译器把设定的数值放到这个内存空间,是数据类型的存储方式解析后存进去的。进行强制类型转换后,内存空间里面的内容是不会发生改变的,改变的是运算时的临时数据对象的类型,是你去读取这个内存空间时的解析方法。所以,一定要对这个数据类型的内存空间和解析方式有一个清晰的认知。