多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
## 基本数据类型 ### 什么是数据? 生活中时时刻刻都在跟数据打交道,比如体重数据、血压数据、股价数据等。在我们使用计算机的过程中,会接触到各种各样的数据,有文档数据、图片数据、视频数据,还有聊QQ时产生的文字数据、用迅雷下载的文件数据等。 C语言中,数据类型可分为:**基本数据类型**,**构造数据类型**,**指针类型**,**空类型四大类**。如图所示: ![](https://box.kancloud.cn/0027809794023af841521034089f6d64_426x268.png) ### 整型、实型和字符型 基本数据类型中最简单也是最常用的整型、实型与字符型。 | 数据类型 | 说明 | 字节 | 应用 | 示例 | | --- | --- | --- | --- | --- | | `char` | 字符型 | 1 | 用于存储单个字符 | `char sex = 'M'` | | `int` | 整型 | 2 | 用于存储整型 | `int height = 18;` | | `float` | 单精度浮点数 | 4 | 用于存储小数 | `float price = 11.1;` | | `double` | 双精度浮点型 | 8 | 用于存储位数更多的小数 | `double pi = 3.1415926;` | #### 整型 整型数据是指不带小数的数字。生活中有很多信息适合使用整型数据来表示,比如:人的年龄、班级的人数、书的总页数等等。因此整型的类型比较多: | 数据类型 | 说明 | 字节 | 取值范围 | | --- | --- | --- | --- | | `int` | 整型 | 2 | `(-23768~32767) -2^15~2^15-1` | | `short int` | 短整型(int 可省略) | 2 | `(-23768~32767) -2^15~2^15-1` | | `long int` | 长整形(int 可省略) | 4 | `(-2147483648~2147483647) -2^31~2^31-1` | | `unsigned int` | 无符号整形 | 2 | `(0~65535) 0~2^16-1` | | `unsigned short int` | 无符号短整形(int 可省略) | 2 | `(0~65535) 0~2^16-1` | | `unsigned long int` | 无符号长整形(int 可省略) | 4 | `(0~4294967295) 0~2^32-1` | > `int`、`short int`、`long int`是根据编译环境的不同,所取范围不同。而其中`short int`和`long int`至少是表中所写范围,但是`int`在表中是以16位编译环境写的取值范围。 > 另外 c语言`int`的取值范围在于他占用的字节数 ,不同的编译器,规定是不一样。ANSI标准定义`int`是占2个字节,TC是按ANSI标准的,它的`int`是占2个字节的。但是在VC里,一个`int`是占4个字节的。 #### 浮点数 浮点数据是指带小数的数字。生活中有很多信息适合使用浮点型数据来表示,比如:人的体重(单位:公斤)、商品价格、圆周率等等。因为精度的不同又分为3种: | 数据类型 | 说明 | 字节 | 取值范围 | | --- | --- | --- | --- | | `float` | 单精度型 | 4 | -3.4*10^-38~3.4*10^38 | | `double` | 双精度型 | 8 | -1.7*10-308~1.7*10^308 | | `long double` | 长双精度型 | 16 | -1.2*10^-4932~1.7*10^4932 | >注:C语言中不存在字符串变量,字符串只能存在字符数组中。 ## 自动类型转换 数据类型存在自动转换的情况,比如: ``` char a = 'a'; int x; double d; x = a; // 字符串类型可以自动转换成整形 d = x; // 整形可以自动转成为浮点型 ``` 自动转换发生在不同数据类型运算时,在编译的时候自动完成。自动转换遵循的规则就好比小盒子可以放进大盒子里面一样,下图表示了类型自动转换的规则。 ![](https://box.kancloud.cn/9e78c4e9edc692e458dbc29ab0bf3122_381x128.png) char类型数据转换为int类型数据遵循ASCII码中的对应值,ASCII码请查看WIKI。 > 注:字节小的可以向字节大的自动转换,但字节大的不能向字节小的自动转换。 ## 强制类型转换 强制类型转换是通过定义类型转换运算来实现的。其一般形式为:  `(数据类型) (表达式) ` 其作用是把表达式的运算结果强制转换成类型说明符所表示的类型,例如: ``` double tempOne = 6.777; int tempTwo = (int)tempOne; // 强制转换为int类型 printf("%f\n", tempOne); // 6.777000 printf("%d\n", tempTwo); // 6 ``` 在使用强制转换时应注意以下问题: 1. 数据类型和表达式都必须加括号,如把`(int)(x/2+y)`写成`(int)x/2+y`则成了把x转换成int型之后再除2再与y相加了。 2. 转换后不会改变原数据的类型及变量值,只在本次运算中临时性转换。 3. 强制转换后的运算结果不遵循四舍五入原则。