每种语言中都含有不同类型的数据类型,如整数、浮点数、字符、字符串等。在C语言中,常用的类型有int(unsigned int、long int 、long long int ) 、float(long、double)、char,字符串则为字符串数组。
本篇整理主要关于各类类型适用场景、储存空间中所占位数以及转换说明符。
目录
整数
- 各种类型整数的总结
类型 在内存中的位数n 表示范围 转换说明符 short 16位 同int %h int 16或32位
取决于系统-32768~32767(16位) %d(十进制)
%o或%#o(八进制,后者会显示0作为前缀,下同)
%x或%#x(十六进制)unsigned int 同int
0~65,535(16位)%u long int 不少于int
一般32位
-2,147,483,648~2147,483,647%ld(十进制)
%lo或(八进制,后者会显示0作为前缀)
%lx(十六进制)long long int 64位 %lld - int类型
此处主要介绍二进制(Binary)、八进制(Octal)、十进制(Decimal)、十六进制(Hexadecimal)。
一般而言使用的是十进制,但对于计算机系统而言,八进制、十六进制也十分常用,因为可以更简洁地表示二进制位模式/组合(bit pattern),因为二进制中3位代表八进制的1位,4位代表十六进制的1位。
在C语言中,在数字前面加特定的前缀表示各种进制:
二进制——无前缀,但会形成由0、1组成的位组合。如5的二进制即为0000000000000101(16位)
八进制——0
十进制——无前缀
十六进制——0x或0X
需要注意的是,无论以什么进制表示数字,其在计算机内均以二进制的形式储存。
- short int
有符号整数,占用储存空间可能比int小的整数类型,,以代替int节省空间。 - long int
有符号整数,能够表示比int范围更大的整数,适用于需要较大数值的情景。 - long long int
有符号整数,能够表示比long int还大的数值,适用于64位系统中需要大数值的场景。
- unsigned int
无符号整数,因此正数范围比int类型大,适用于只需要使用非负数的场景,如计数、地址。
浮点数
浮点数就是数学中的小数。按照精度的不同分为单精度(float)与双精度(double);按照位数的不同,还分为double、long double等。
- 计算机中浮点数的表示方法
在计算机系统中,一个浮点数由符号+指数+尾数三部分组成。对于float,其占32位,前8位为符号+指数,后24位为尾数。
在计算机系统中,浮点数需要先经过规范化的过程,再将各部分储存起来:其首先将一个浮点数转为一定位数的二进制数,后通过移动小数点使得二进制数的小数点左边只剩一个1。
该值的原始数值以“± 2的指数×1.xxxxxx”的形式表示。其中.xxxx就是尾数,具体的x有几位即代表了数的精度。
- 各类型浮点数的总结
类型 在内存中的位数n 表示范围 有效数字
(精度)转换说明符 float 32位 6 %f double 64位
10 %f或%e(指数记数法的浮点数) long double 64位
至少不低于double %lf(十进制)
%la或%lA(十六进制下指数记数法的浮点数,a/A分别代替e/E) - 一个特殊的浮点数——NaN
NaN的含义是Not a Number,其用于部分数学函数的返回值不存在的情景,以表示该行为未定义。如给反正弦函数asin()传入大于1的参数,此时返回值即为NaN,若用printf()打印出结果,即显示为nan或NaN或其他类似内容。
字符char
C语言中,会将char类型的变量视为int类型的变量。
- 占位数
字符类型在系统中所占位数为1字节(即8位)。 - 初始化
char类型变量初始化时,需要使用单引号'',如:char c='A';
- 转换说明符
用%c表示char类型的变量以输入或者输出变量。 - 转义序列
char类型的变量值只有256个,如字母、控制字符等。部分序列不能打印出来,但具有其他的含义,如换行、回车等,具体如下:
对于char类型,其实还可以通过“\+0~255的数字”来表示出各个char类型的值。转义序列 含义 \a 警报 \b 退格 \f 换页 \n 换行 \r 回车 \t 水平制表符 \v 垂直制表符 \\ 反斜杠\ \' 单引号 \" 双引号 \? 问号 \0oo 八进制值,oo必须是有效的八进制数,o的数量可变。 \xhh 十六进制值,hh必须是有效的八进制数,h的数量可变。
布尔类型_Bool
C99标准添加了_Bool类型表示布尔值。在C语言中,1代表true,0代表false,实际上_Bool类型还是整数类型,但只占用1位储存空间。