• 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
2
char c = 65;
printf("c = %c", c);

浮点型

类型 范围
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主要用于对函数返回、函数参数的限定。