C语言中的类型分为一下几种
序号 | 类型和描述 |
---|---|
1 | 基本类型:算术类型 ,整数类型和浮点类型 |
2 | 枚举类型:也是算术类型,但是是一些离散固定的整数类型 |
3 | void类型:表明没有可用的值 |
4 | 派生类型:指针类型,数组类型,结构类型,函数类型以及共用体类型 |
整数类型
类型 | 存储大小(1个字节(bit)占8位[bits]) | 值的范围(由二进制得出) |
---|---|---|
char | 1字节 | -128 |
unsigned char | 1字节 | 0~255 |
signed char | 1字节 | -128~127 |
int | 2字节(16位系统)或4字节(32/64位系统) | -32,768 到 32,767 或 -2,147,483,648 到 2,147,483,647 |
unsigned int | 2字节(16位系统)或4字节(32/64位系统) | 0 到 65,535 或 0 到 4,294,967,295 |
short | 2字节 | -32,768 到 32,767 |
unsigned short | 2字节 | 0 到 65,535 |
long | 4字节 | -2,147,483,648 到 2,147,483,647 |
unsigned long | 4字节 | 0 到 4,294,967,295 |
但是C语言的取值范围是如何计算的出来的呢?
二进制数据在计算机中存储的是补码
正数的补码等于原码,负数补码需要在符号位之后取反+1
如果以最高位为符号位,二进制原码最大为0111111111111111=2的15次方减1=32767
最小为1111111111111111=-2的15次方减1=-32767
此时0有两种表示方法,即正0和负0:0000000000000000=1000000000000000=0
所以,二进制原码表示时,范围是-32767~-0和0~32767,因为有两个零的存在,所以不同的数值个数一共只有2的16次方减1个,比16位二进制能够提供的2的16次方个编码少1个。
但是计算机中采用二进制补码存储数据,即正数编码不变,从0000000000000000到0111111111111111依旧表示0到32767,而负数需要把除符号位以后的部分取反加1,即-32767的补码为1000000000000001。
到此,再来看原码的正0和负0:0000000000000000和1000000000000000,补码表示中,前者的补码还是0000000000000000,后者经过非符号位取反加1后,同样变成了0000000000000000,也就是正0和负0在补码系统中的编码是一样的。但是,我们知道,16位二进制数可以表示2的16次方个编码,而在补码中零的编码只有一个,也就是补码中会比原码多一个编码出来,这个编码就是1000000000000000,因为任何一个原码都不可能在转成补码时变成1000000000000000。所以,人为规定1000000000000000这个补码编码为-32768。
所以,补码系统中,范围是-23768~32767。
因此,实际上,二进制的最小数确实是1111111111111111,只是二进制补码的最小值才是1000000000000000,而补码的1111111111111111是二进制值的-1
当然,如果你不确定当前每个类型占的自己数的话,可以使用一下代码来打印一下
1 |
|
浮点类型
类型 | 存储大小(1个字节(bit)占8位[bits]) | 值的范围(由二进制得出) | 精度 |
---|---|---|---|
float | 4 字节 | 1.2E-38 到 3.4E+38 | 6 位小数 |
double | 8 字节 | 2.3E-308 到 1.7E+308 | 15 位小数 |
long double | 16 字节 | 3.4E-4932 到 1.1E+4932 | 19 位小数 |
想要用float的函数和宏就需要引入float相关的函数定义
1 |
|
void类型
指定没有可用的值
序号 | 类型与描述 |
---|---|
1 | 函数返回为空 C 中有各种函数都不返回值,或者您可以说它们返回空。不返回值的函数的返回类型为空。例如 void exit (int status); |
2 | 函数参数为空 C 中有各种函数不接受任何参数。不带参数的函数可以接受一个 void。例如 int rand(void); |
3 | 指针指向 void 类型为 void * 的指针代表对象的地址,而不是类型。例如,内存分配函数 void *malloc( size_t size ); 返回指向 void 的指针,可以转换为任何数据类型。 |