一文了解 C语言 数据类型介绍

变量的数据类型

1)每一种数据都定义了明确的数据类型,在内存中分配了不同大小的内存空间(使用字节多少表示)。
2)数据类型一览图

在这里插入图片描述
3)数据类型的小结

注意:在 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<stdio.h>

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<stdio.h>

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,char 是 1 个字节(可以存字母或者数字),多个字符称为字符串,在 C 语言中 使用 char 数组 表示,数组不是基本数据类型,而是构造类型 [关于数组我们后面详细讲解.]

#include<stdio.h>

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)字符和码值的对应关系是通过字符编码表决定的(是规定好的)

布尔类型:boolean

1)C 语言标准(C89)没有定义布尔类型,所以 C 语言判断真假时以 0 为假,非 0 为真 [案例]
2)但这种做法不直观,所以我们可以借助 C 语言的宏定义后续学习 。
3)C 语言标准(C99)提供了_Bool 型,_Bool 仍是整数类型,但与一般整型不同的是,_Bool 变量只能赋值为 0 或 1, 非 0 的值都会被存储为 1,C99 还提供了一个头文件 <stdbool.h> 定义了 bool 代表_Bool,true 代表 1,false 代 表 0。只要导入 stdbool.h ,就能方便的操作布尔类型了 , 比如 bool flag = false;[了解]

#include<stdio.h>
void main(){
    
    
	
	int isPass = -1;
	//如果是0 则不输出,非0则输出 0为假,非0为真
	if(isPass){
    
    
		printf("通过考试!");
	}

}

基本数据类型转换

自动类型转换

介绍:当 C 程序在进行赋值或者运算时,精度小的类型自动转换为精度大的数据类型,这个就是自动类型转换。

数据类型按精度(容量)大小排序为

在这里插入图片描述

数据类型自动转换表规则

在这里插入图片描述

自动类型转换细节说明

1) 有多种类型的数据混合运算时,系统首先自动将所有数据转换成精度最大的那种数据类型,然后再进行计算(如 int 型和 short 型运算时,先把 short 转成 int 型后再进行运算)。
2)若两种类型的字节数不同,转换成字节数大的类型,若两种类型的字节数相同,且一种有符号,一种无符号, 则转换成无符号类型
3)在赋值运算中,赋值号两边量的数据类型不同时,赋值号右边的类型将转换为左边的类型,如果右边变量的数据类型长度比左边长时,将丢失一部分数据,这样会降低精度,丢失的部分按四舍五入向前舍入
4)代码展示

#include<stdio.h>

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<stdio.h>

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)强转符号只针对于最近的操作数有效,往往会使用小括号提升优先级

猜你喜欢

转载自blog.csdn.net/weixin_45417821/article/details/121922246
今日推荐