数据类型
1.基本类型
char、short int、int、long int、float、double
扩展:常量和变量
常量:在程序运行过程中不可改变的量
变量:其值可以改变的量成为变量
- 整型: 100、125、-100、0
- 实型:3.14、0.125f、-3.789
- 字符型:‘a’、‘b’、‘c’
- 字符串:“a” 、“abc”、“123”
字符数据
-
字符常量:
直接变量:用单引号括起来,如 ‘a’、‘b’、'0’等.
转义字符:以反斜杠 “\” ,后跟一个或几个字符、如’\n’ , '\t’等,分别代表换行,横向跳格
-
字符变量:
用char定义,每个字符变量被分配到一个字节的内存空间
字符值以ASCII码的形式存放在变量的内存单元中;
注:
char a; a = 'x'; printf("%c 的ASCII码对应 %d",a,a); // %c 是打印字符 %d 打印数字 // a变量中存放的是字符'x'的ASCII:120 // 即 a = 120 跟 a = 'x'在本质上是一致的.
-
字符串常量
是由双引号括起来的字符序号,如"China"、"哈哈哈"等都是合法的字符串常量。
-
字符串常量与字符串变量的不同
'a’为字符常量,“a” 为字符串常量
每个字符串的结尾,编译器会自动的添加一个结束标志位’\0‘,即“a”包括两个字符’a’ 和 ‘\0’
整数类型
-
整型常量:(按进制分):
十进制:以正常数字1~9 开头, 如 457 789
八进制:以数字 0 开头 , 如 0123
十六进制:以 0x 开头, 如0x1e
a = 10,b = 11,c = 12,d = 13,e = 14,f = 15
-
整数变量:
- 有/无符号短整数(un/signed)short(int) 2个字节
- 有/无符号基本整型(un/signed) int 4个字节
- 有/无符号长整数(un/signed) long(int) 4个字节 (32位处理器)
实型数据(浮点型)
-
实型常量。
- 实型常量也称为实数或者浮点数
十进制形式:由数字和小数点组成 0.0、 0.12、 5.0
指数形式:123e代表123 * 10的三次方
123e-3 代表 123 * 10的**负**三次方
- 不以f结尾的常量是 double 类型
- 以 f 结尾的常量(如3.14f)是 float 类型
-
实型变量
单精度(float)和双精度(double) 3.1415936753456
-
**float**型:占4个字节,7位有效数字,指数-37 到 38
3333.333 33
-
**double**型:占8个字节,16位有效数字,指数 -307 到 308
-
格式化输出
- %d 十进制有符号整数
- %u 十进制无符号整数
- %x 以十六进制表示的整数
- %o 以八进制表示额整数
- %f float 型浮点数
- %lf double 型浮点数
- %e 指数形式的浮点数
- %s 字符串
- %c 单个字符
- %p 指针的值
char a = 'a';
int b = 110;
float c = 3.14f;
double d = 1.23;
int e = 0x3d;
printf("a = %c\n",a);
printf("b = %d\n", b);
printf("c = %f\n", c);
printf("d = %lf\n", d);
printf("e = %x\n", e);
printf("e = %d\n", e);
特殊应用
- %3d:要求宽度为3位,如果不足3位,前面空格补齐;如果足够3位,此语句无效
- %03d:要求宽度为3位,如果不足3位,前面0补齐;足够无效
- %-3d:要求宽度为3位,如果不足3位,后面空格补齐;足够无效
- %.2f:小数点后只保留2位
- %5.2f:前面的5表示总共占5个位置,小数点后2位,如果前面超过了5个位置则无效
2.构造类型
概念:由若干个相同的或不相同类型数据构成的集合,这种数据类型为构造类型 例如: int a[10];
数组、结构体、共用体、枚举
3.类型转换
数据有不同的类型,不同类型数据之间进行混合运算是必然涉及到类型的转换问题
转换类型的方法有两种:
-
自动转换
遵守一定的规则 系统自动完成
-
强制类型转换
把表达式的运算结果强制转换成所需的数据类型
- 自动转换的原则:
- 占用内存字节少(值域小)的类型,向占用字节数多(值域大)的类型转换,以保证精度不降低、
-
当表达式中出现了 char、short int 、 int 类型中的一种或多种,没有其他类型了,参加运算的成员全部变成int类型的参加运算,结果也是int类型的
printf("%d\n", 5/2);
-
当表达式中出现了带小数点的实数,参加运算的成员全部变成double类型的参加运算,结果也是 double 型。
printf("%lf\n", 5.0/2);
-
当表达式中有有符号 也有无符号,参加运算的成员变成无符号数参加运算结果也是无符号数(表达式中无实数)
#include<stdio.h> int main() { int a = -8; unsigned int b = 7; printf("a + b = %d\n", a + b); // 这里 %d 当作有符号来计算了 if(a + b > 0) { printf("a + b > 0\n"); } else if(a + b < 0) { printf("a + b < 0\n"); } else { printf("a + b = 0\n"); } return 0; }
-
在赋值语句等号右边的类型自动转换为等号左边的类型
int a; float b = 5.8f;// 后面加f代表5.8 是float类型,不加的话,认为是 double 类型 a = b; printf("a = %d\n",a); return 0;
-
注意自动类型转换都是在运算的过程中进行临时性的转换,并不会影响自动类型转换的变量的值和其类型
强制类型转换
-
通过类型转换来实现
-
(类型说明符) (表达式)
-
功能: 把表达式的运算结果强制转换成类型说明符所表示的类型
-
例如: (float)a; //把a的值转换为实型
-
(int)(x+y); // 把x + y 的结果值转换为整型
-
注意: 类型说明符**必须加括号**.
-
float x = 0; int i = 0; x = 3.6f; i = (int)x; printf("i = %d\n",i); printf("x = %f\n",x);