C语言的基本数据类型
- C语言中的数据类型有
- 整型
- 实型(浮点型)
- 字符型
- 空类型(void)
整型
类型 | 最小范围 |
---|---|
short int | -32768 ~ 32767 |
unsigned short int | 0 ~ 65535 |
int | -32768 ~ 32767 |
unsigned int | 0 ~ 65535 |
long int | -2147483648 ~ 2147483647 |
unsigned long int | 0 ~ 4294967295 |
signed和unsigned
signed表示有符号数,首位用来表示正负
unsigned表示无符号数,没有符号位,只能表示正数,所以比同类型的有符号正数能多存一位。
为什么会有unsigned?
C语言发明的年代,机器配置相对现在来说很低,一位只差就会有很大性能提升,就把一些不会为负数的值定义为unsigned。现在开发中应尽量避免使用unsigned
最小范围
取值范围取决于类型所占的位长,C89/90标准中并没有指定各个类型的具体长度。
short int至少16位(2个字节)
long int至少32位(4个字节)
int所占字节建议为一个机器字节,由编译器作者根据操作系统决定。
short int长度不能大于int,long int的长度不能小于int
short int、long int可以省略int直接写成short、long
字符型
- char:0~127
char用于存储单个字符值,但是其本质上也是存储一个小的整型值,可以直接给char赋值字符对应的整型数字。
1 | char c = 65; |
浮点型
类型 | 范围 |
---|---|
float | 3.4E-38 ~ 3.4E+38 |
double | 1.7E-308 ~1.7E+308 |
long double | 3.4E-4932 ~ 1.1E+4932 |
浮点在计算机中是按照科学计数法的形式存储,分为符号(S)、指数(E)、有效数字(M)
符号位:0表示正数,1表示负数
指数位:指数有正负,所以一半表示负数,一半表示正数;只存储正数,使用时减去偏移量。(如float中有8位指数位,范围是0-255,其中0-126表示负数)
有效数字位:数字转化为二进制1.xxxx… * 2^E,省略1的xxxx的部分
32位浮点二进制的float浮点类型表示
- 最高位是符号位,0表示正数,1表示负数
- 之后8位是指数位,表示小数点移动位数
- 最后23位是有效数字位
- 最大的数 1.111…1*2^127,可以转化为 (2-2^-23)*2^127=3.4028234663852886*10^38
- 最小正数 当指数位E全为0时,最高位不省略1,所以最小正数为 0.00…1*2^-126=2^-23*2^-126=2^-149=1.401298464324817*10^-45
为什么浮点型没有unsigned?
浮点型是按照整数、小数、指数分开存放的,省略符号位没有办法通过进位达到增加数据的作用。
空类型
void 的字面意思是“空类型”;void *
则为“空类型指针”,void *
可以指向任何类型的数据。
void主要用于对函数返回、函数参数的限定。