1)每一种数据都定义了明确的数据类型,在内存中分配了不同大小的内存空间(使用字节多少表示)。
2)数据类型一览图
注意:在 c 中,没有字符串类型, 使用字符数组表示字符串
在不同系统上,部分数据类型字节长度不一样, int 2 或者 4
C 语言的整数类型就是用于存放整数值的,比如 12 , 30, 3456 等等
比如int a = 12;
1)各种类型的存储大小与操作系统、系统位数和编译器有关 ,目前通用的以 64 位系统为主。
2)在实际工作中,c 程序通常运行在 linux/unix 操作系统下.二级考试,使用 windows
3)C 语言的整型类型,分为有符号 signed 和无符号 unsigned 两种,默认是 signed
4)C 程序中整型常声明为 int 型,除非不足以表示大数,才使用 long long
5)bit(位): 计算机中的最小存储单位。byte(字节):计算机中基本存储单元。 1byte = 8bit [二进制再详细说]
C 语言的浮点类型可以表示一个小数,比如 123.4 ,7.8 ,0.12 等等
#include
void main(){
double salary = 10000.56;
double num1 = 1.3;
double num2 = 4.5;
double sum = num1 + num2;
printf(" sum = %.2f" , sum);
}
1)关于浮点数在机器中存放形式的简单说明,浮点数 = 符号位 + 指数位 + 尾数位 , 浮点数是近视值
2)尾数部分可能丢失,造成精度损失。
1)浮点型常量默认为 double 型 ,声明 float 型常量时,须后加‘f’或‘F’。
2)浮点型常量有两种表示形式
十进制数形式:如:5.12 512.0f .512 (必须有小数点)
科学计数法形式:如:5.12e2 、 5.12E-2
3)通常情况下,应该使用 double 型,因为它比 float 型更精确。
4)printf("d1=%f ", d1); // 在输出时,默认保留 小数点 6 位
5)代码展示
#include
void main(){
//浮点型常量默认为 double 型 ,声明 float 型常量时,须后加‘f’或‘F’
float d1 = 1.18909095; //从“double”到“float”截断, 1.1 是 double
float d2 = 1.1f;//1.1f 就是 float
double d3 = 1.3; // ok
double d4 = 5.12;
double d5 = .512; // 等价 0.512
double d6 = 5.12e2; //等价 5.12 * (10^2) = 512
double d7 = 5.12e-2; // 等价 5.12 * (10^-2) = 5.12 / 100 = 0.0512
//在输出时,如果%f 默认保留小数点 6 位
printf("d1=%.15f d2=%f d3=%f d4=%f d5=%f d6=%f d7=%f", d1,d2,d3,d4,d5,d6,d7);
}
字符类型可以表示单个字符,字符类型是 char,char 是 1 个字节(可以存字母或者数字),多个字符称为字符串,在 C 语言中 使用 char 数组 表示,数组不是基本数据类型,而是构造类型 [关于数组我们后面详细讲解.]
#include
void main(){
char c1 = 'A';
char c2 = '0';
char c3 = '\t';
printf("c1=%c c3=%c c2=%c", c1, c3, c2); //%c 表示以字符的形式输出
}
1)字符常量是用单引号(’’)括起来的单个字符。例如:char c1 = ‘a’; char c3 = ‘9’;
2)C 中还允许使用转义字符‘\’来将其后的字符转变为特殊字符型常量。例如: char c3 = ‘\n’; // '\n’表示换 行符
3)在 C 中,char 的本质是一个整数,在输出时,是 ASCII 码对应的字符。
4) 可以直接给 char 赋一个整数,然后输出时,会按照对应的 ASCII 字符输出 [97]
5)char 类型是可以进行运算的,相当于一个整数,因为它都对应有 Unicode 码.
ASCII码对照表 :http://c.biancheng.net/c/ascii/
1)字符型 存储到 计算机中,需要将字符对应的码值(整数)找出来
存储:字符’a’——>码值 (97)——>二进制 (1100001)——>存储()
读取:二进制(1100001)——>码值(97)——> 字符’a’——>读取(显示)
2)字符和码值的对应关系是通过字符编码表决定的(是规定好的)
1)C 语言标准(C89)没有定义布尔类型,所以 C 语言判断真假时以 0 为假,非 0 为真 [案例]
2)但这种做法不直观,所以我们可以借助 C 语言的宏定义后续学习 。
3)C 语言标准(C99)提供了_Bool 型,_Bool 仍是整数类型,但与一般整型不同的是,_Bool 变量只能赋值为 0 或 1, 非 0 的值都会被存储为 1,C99 还提供了一个头文件
#include
void main(){
int isPass = -1;
//如果是0 则不输出,非0则输出 0为假,非0为真
if(isPass){
printf("通过考试!");
}
}
介绍:当 C 程序在进行赋值或者运算时,精度小的类型自动转换为精度大的数据类型,这个就是自动类型转换。
1) 有多种类型的数据混合运算时,系统首先自动将所有数据转换成精度最大的那种数据类型,然后再进行计算(如 int 型和 short 型运算时,先把 short 转成 int 型后再进行运算)。
2)若两种类型的字节数不同,转换成字节数大的类型,若两种类型的字节数相同,且一种有符号,一种无符号, 则转换成无符号类型
3)在赋值运算中,赋值号两边量的数据类型不同时,赋值号右边的类型将转换为左边的类型,如果右边变量的数据类型长度比左边长时,将丢失一部分数据,这样会降低精度,丢失的部分按四舍五入向前舍入
4)代码展示
#include
void main(){
//举例 1
char c1 = 'a';
int num1 = c1; //ok
double d1 = num1; //ok
//ok
//举例 2
short s1 = 10;
int num2 = 20;
int num3 = s1 + num2; //ok
//举例 3
float f1 = 1.1f; //ok
double d2 = 4.58667435;
f1 = d2;
// 出现精度损失 (double -> float )
printf("f1=%.8f", f1); // 期望: 4.58667435 实际:f1=4.58667421
}
将精度高的数据类型转换为精度小的数据类型。使用时要加上强制转换符 ( ),但可能造成精度降低或溢出,格 外要注意。
强制类型转换一般格式如下: (类型名) 表达式 什么是表达式: 任何有值都可以称为表达式,比如 1+ 2, int num = 2
这种强制类型转换操作并不改变操作数本身
案例演示
#include
void main(){
double d1 = 1.934;
int num = (int)d1; //这里注意,不是进行四舍五入,而是直接截断小数后的部分
//强制转换只对最近的数有效, 如果希望针对更多的表达式转换,使用()
//int num2 = (int)3.5 * 10 + 6 * 1.5; // 3 * 10 + 6 * 1.5 = 30 + 9.0 = 39.0
int num3 = (int)(3.5 * 10 + 6 * 1.5); // 35.0 + 9.0 = 44.0 -> int = 44
printf("\nnum3=%d", num3); // num3 = 44
printf("\nnum=%d d1=%f" , num, d1); // d1 仍然是 double
}
强制类型转换细节说明
1)当进行数据的从 精度高——>精度低,就需要使用到强制转换
2)强转符号只针对于最近的操作数有效,往往会使用小括号提升优先级