一.C数据类型
1. C语言支持的数据类型
1.1 基础类型
1.1.1 数值类型
1) 整型
1.1. 基础整型 (int)
1) 有符号基础整型 ([signed] int)
2) 无符号基础整型 (unsigned int)
1.2. 短整型 (short [int])
1) 有符号短整型 ([signed] short)
2) 无符号短整型 (unsigned short)
1.3. 长整型 (long [int])
1) 有符号长整型 ([signed] long)
2) 无符号长整型 (unsigned long)
1.4 长长整型 (long long) (C99 标准引入)
1) 有符号长长整型 ([signed] long long)
2) 无符号长长整型 (unsigned long long)
2) 浮点型
2.1 单精度浮点型 (float)
2.2 双精度浮点型 (double)
1.1.2 字符类型 (char)
1.1.3 boolean (bool) 布尔类型 (C99 标准引入)
该类型的数据取值为 true、false
1.2 构造类型(用户自定义类型)
1.2.1 结构体 (struct)
1.2.2 联合体/共用体 (unoin)
1.2.3 枚举类型 (enum)
1.3 指针类型
1.4 空类型 (void)
2. C语言中数据的表现形式
2.1 常量
常量:在C语言程序运行中,值不能改变的数据。
常量分类:
1. 整型常量
76 76L 76u 76lu
整型常量的表示形式:
1.1 十进制
1.2 八进制 (以0 为前缀,每个数位取值0~7,逢八进一) 例子: 0142
1.3 十六进制 (以0x 为前缀,每个数位取值0~9 A~F,逢十六进一) 例子: 0x142
进制转换:
其他(八,十六) ---> 十进制
转换方法: 按权相加 (权重:例: 8^0 8^1....)
0142 ---> 1 * 8^2 + 4 * 8^1 + 2 * 1 == 98
0x142 ---> 1 * 16^2 + 4 * 16^1 + 2 * 1 == 322
十进制 ---> 其他(八,十六 )
转换方法: 十进制数不停的除以进制数,直到商为0,记录余数,将余数反向组合
八进制 <--> 十六进制
借助于二进制数据转换更加简单:
八进制 <--> 二进制
转换方法: 将八进制数的每一数位均转换为3位的二进制数
0142 001100010
十六进制 <--> 二进制
转换方法: 将十六进制数的每一数位均转换为4位的二进制数
0x142 0001 0100 0010
二进制 <--> 八进制
转换方法: 二进制数由右向左,每3数划为1组,不够3位左侧用0补充,将每一组转换
为八进制的一个数位。
0x142 000 101 000 010 0502
二进制 <--> 十六进制
转换方法: 二进制数由右向左,每4数划为1组,不够4位左侧用0补充,将每一组转换
为十六进制的一个数位。
0142 0000 0110 0010 0x62
2. 浮点型常量
3.14(3.14l) 3.14f;
1.5e-3 --> 0.0015
3. 字符常量
用一组 '' 括起来的一个字符,包括转义字符
'A' '\n'
4. 字符串常量
用一组 "" 括起来的一个字符或多个字符,包括转义字符
"A" "Class\t"
5. 符号常量
3.1415 ---> PI
符号常量的定义格式:
#define 符号 常量数据
例子: #define PI 3.1415
使用符号常量的意义(好处):
1. 可提高代码的可维护性 (一改全改)
2. 可提高代码的可读性
3. 可将复杂数据简单化
2.2 变量
变量:表面理解: 在C语言程序运行中,值可以改变的数据。
深层次含义: 变量其实是代表一块内存空间。相当于说变量是一块内存空间
的标识符。
变量的定义格式:
数据类型 变量名列表;
变量的定义过程。其实就是系统分配内存空间的过程,分配内存的大小取决于数据类型,
数据类型: 保存在变量缩代表的内存空间中数据的类型。
命名规范:
1. 变量名可以是字母,数字,下划线的组合,但不能以数字开头;
2. 变量名不能和系统中已经存在的标识符重名;
● 对标识符的理解: 用来标识对象的名字的有效字符。
对象包括变量、函数、数组、类型等。即标识符就是对象的名字。
注意事项: C规定对标识符使用遵循 "先定义,后使用"
变量的初始化:
是定义变量的同时给变量赋初值;
数据类型 变量名1 = 初值1,变量名2 = 初值2...;
例子: int a = 0, b = 0, c = 0;
long l = 888;
2.3 不同类型的数据在内存中的存储方式
1. 整型数据
整型数据在内存中是以其补码形式存在的;
正整数
原码: 数据的二进制形式
反码: 数据的二进制形式
补码: 数据的二进制形式
负整数:
原码: 最高位代表符号,其余是代表数据;
反码: 符号位不变,其余位取反(0 -> 1, 1 -> 0);
补码: 反码 + 1
2. 浮点型数据
将整数部分和小数部分分别转换为二进制形式,需要用指数形式表示,
单精度 符号位 (1) 指数位 (8 ) 尾数(23)
0 / 1 指数+指数偏移量(127) 指数形式的小数部分
例子: 5.5 --> 0101.1 --> 1.011 * 2^2
0 10000001 0110000000000...
3. 字符型数据
原则: 字符型数据在内存中存储时,并不是将字符本身存储到内存中,而是将字符的
ASCII 值存储到内存中的。
'0' 0