导图社区 C语言基本数据类型
整理归纳C语言基本数据类型的知识,较为详细地呈现C语言中基本数据类型的知识架构,为后续的学习和程序编写打下坚实基础。
编辑于2022-09-06 09:55:41 四川省基本数据类型
字符型
字符集
ASCII
non printable character
printable character
char
用''(单引号)括起来
字符操作
ASCII中,char的取值范围是[0,127]
计算中出现字符时,C语言只是使用它对应的整数值
字符有和数相同的属性
signed char
8 bits
表示范围-128~127
unsigned char
8 bits
表示范围0~255
转义序列
作用
提供了一种呈现如换行符(不可打印)
字符转义序列
使用方便
没有包含所有不可打印字符
数字转义序列
八进制转义序列由字符\和一个八进制数(最多三位)组成
十六进制专业序列由字符\x和一个十六进制数组成,x必须小写
使用
作为字符常量使用时,转义序列应用一对单引号括起来
直接使用转义序列的代码可读性差,所以采用#define的方式给他们命名
可以嵌入字符串中使用
io
%c
对单独一个字符进行读写操作
scanf读取字符时不会跳过空白字符
%c
(sp)%c
强制scanf函数在读入字符前跳过空白字符
读写字符的函数
getchar
int getchar (void);
返回值为int
读入出错时返回-1
特点
每次调用将读取并返回一个字符
不会在读取时跳过空白字符
用途
循环中搜寻字符
跳过不确定数量的相同字符
putchar
putchar (ch);
优点
比scanf和printf简单,因为scanf和printf是设计来进行格式化输入输出的
精简循环
注意
混用getchar和scanf函数时,scanf仅消耗掉匹配的输入数据,其余部分仍留在缓冲区(包括换行符)
类型转换
原因
计算机执行算术运算时,通常要求
操作数具有相同的位数
并且存储方式也相同
不同类型的数混合在同一表达式中时,编译器需要生成一些指令进行操作数的类型转换
隐式转换(implicit)
转换方式
编译器自动处理转换
使用场景
算术
算术表达式或逻辑表达式中操作数类型不同时(常用算术转换)
赋值运算符右侧表达式与左侧变量类型不匹配时
函数
函数调用中实际参数和其对应的形式参数的类型不匹配时
return语句中表达式的类型和函数返回值的类型不匹配时
常用算术转换
适用范围
子主题
策略
把操作数转换为可以安全的适用于两个数值的“最狭小”的数据类型
提升:将相对狭小类型的操作数转换成另一个操作数的类型
整型提升:把字符或短整型转换成int类型
规则
提升
任一操作数为浮点数
把整型向浮点数转换
浮点数转换为精度更高的浮点数
两个操作数均不是浮点数
char和short int
整型提升
其他情况
向更高级的数据类型转换
特例(两个条件)
long int和unsigned int数据类型长度相同
一个操作数为long int,另一个为unsigned int
均转换为unsigned long
较低级->较高级(按存储长度)
赋值中的类型转换
把赋值运算符右侧表达式的值转换为左侧变量的类型
浮点数赋给整数会向零截取
表达式的值超出了范围会得到无意义的数
显示转换(explicit)
转换方式
通过使用强制类型转换运算符执行
表示形式
(类型)变量
(类型)(表达式)
注意
暂时性的改变,不会改变变量定义时的数据类型
强制类型转换可以用来控制编译器,强制其执行转换
(类型名)为一元运算符
用途
避免溢出
整数相除获得小数
类型定义
typedef type declaration
定义
用于对一个已有的数据类型创建别名
本质
一个类型定义声明没有创建一个新的类型
仅仅是对某个已有的类型增加一个新名称
优点
使程序更加易于理解(增加可读性)
使程序更加容易修改
用途
设置布尔型
编写可移植程序
不同计算机上相同的类型取值范围可能不同
C语言库自身使用typedef为那些可能依据C语言实现的不同而不同的类型创建类型名
typedef与#define的区别
sizeof运算符
用途
取数据类型,常量,变量,或者表达式值的存储长度的运算符(以字节为单位)
语法规则
sizeof(数据类型说明符/表达式)
sizeof(类型名)
sizeof(表达式)
括号可省略
但一般不省略
特点
一元运算符
优先级较高
整型
类型标识符
int
长度(size)
16位机
16bits
32位机
32bits
种类
short (int)
unsigned short (int)
int
有符号整型
最左边的一位为符号位
0
正数或零
1
负数
表示范围
[-2³¹+1,2³¹-1]
unsigned (int)
无符号整型
最左边的一位为数值的一部分
表示范围
[0,2³²-1]
long (int)
unsigned long
limit.h
内容
int的最大值最小值
INT_MIN
INT_MAX
short的最大值最小值
SHORT_MAX
SHORT_MIN
long的最大值最小值
LONG_MAX
LONG_MIN
整数常量
不同进位制的常量
十进制
包含数字0~9
不能以0开头
八进制
包含数字0~7
必须以0开头
十六进制
包含数字0~9和字母a~f
以0x开头
字母可大小写
类型
十进制
依次尝试以int,long int,unsigned long int来表示
八进制和十六进制
依次尝试以int,unsigned int,long int,unsigned long int来表示
强制编译器以特定格式处理常量
长整型
添加后缀L或l
无符号整型
添加后缀U或u
无符号长整型
添加后缀UL或ul
整数溢出
原因
两个整型算数运算的结果仍为整型
对整型执行算术运算,其结果有可能超出整型表示的范围
运算结果不能表示为整型,发生溢出
结果
有符号数发生溢出,程序的行为没有定义
无符号数发生溢出,产生正确结果对2^n取模,其中n是存储运算结果的位数
io
int
%d
十进制整数
无符号数
%u
无符号十进制整数
%o
无符号八进制整数
%x
无符号十六进制整数
无符号短整型
u、o、x前加h
长整型
d、u、o、x前加l
浮点型
单精度浮点数float
在IEEE浮点标准中:32位
双精度浮点数double
在IEEE浮点标准中:64位
拓展双精度浮点数long double
IEEE浮点标准
单精度
32位
符号位
1bits
指数部分
8bits
小数部分
23bits
最大值
约3.40×10³⁸
精度
6个十进制数字
float.h
存储方式
以科学计数法的形式存储
每个数以符号,指数,小数三部分组成
浮点型常量
小数形式
必须有小数点
指数形式
(数字)e(或E)(指数部分)
指数部分必须为整数,可以有+-
类型
缺省情况下,浮点常量以double类型存放
强制编译器把浮点常量以float类型处理,添加后缀f或F
强制编译器把浮点常量以long double类型处理,添加后缀l或L
io
float
%f
%e
%g
double
scanf
%lf
%le
%lg
printf
%f
%e
%g
long double
scanf
%Lf
%Le
%Lg
printf
%Lf
%Le
%Lg