目录
一、数据类型分类
1.整型家族
char (可能为有符号也可能为无符号字符类型,取决于编译器)
signed char/unsigned char
short (short默认为signed short,其中signed short int就是短整型,可以省略为short)
signed short/unsigned short
int (默认为signed int)
unsigned int/signed int
long(默认为signed long,其中signed long int就是长整型,省略为long)
unsigned long/signed long
2.浮点数家族
float 内存中占4字节
double 内存中占8字节
3.构造类型(自定义类型)
数组类型
结构体类型 struct
枚举类型 enum
联合体类型 union
4.指针类型
int*pf
char*pv
void*pl...
5.空类型 void
函数参数
函数返回类型
空指针类型
二、整型数据内存中的存储
1.原码、反码、补码
整型数据在计算机中有三种二进制存储方式,分别为原码、反码、补码,其中整型在内存中以补码 的形式存放
原码就是该整型数据本身转换的二进制大小,其中有符号数的最高位为符号位,其余位是数值位,若为整数,符号位为0,若为负数,符号位为1;
反码是原码的符号位不变,其余位按位取反;
补码是反码加一得到。
int a = 10;
//00000000000000000000000000001010 -原码(正数,最高位符号位为0)
//01111111111111111111111111110101 -反码(符号位不变,其余按位取反)
//01111111111111111111111111110110 -补码(反码加一)
int b = -10;
//10000000000000000000000000001010 -原码(负数,最高位符号位为1)
//11111111111111111111111111110101 -反码(符号位不变,其余按位取反)
//11111111111111111111111111110110 -补码(反码加一)
从原码到反码有一种方式:取反加一
从反码到原码有两种方式:①取反加一;②减一取反
其中取反在有符号数中都是符号位不变,其他位按位取反
由此可知,补码和原码的相互转换,其运算过程是相同的,不需要额外的硬件电路;同时,由于内存中存放的是补码,就可以将符号位和数值域统一处理,cpu只有加法器,加减法可以统一处理
2.大小端问题
数据存储在内存中,整型数据是以字节为单位存储的,只要数据超出一个字节的大小,就涉及到在内存中存放的顺序问题,通常上,我们使用的是大小端的存放方法:
大端存储:数据的高位存放在内存的低地址处,低位存放在内存的高地址处;
小端存储:数据的低位存放在内存的低地址处,高位存放在内存的高地址处。
3.有符号数和无符号数的取值范围如何确定?
char类型在内存中占一个字节,有符号数的范围为-128~127、无符号数范围0~255,超出该范围大小的数字发生截断,留下八位存放在char类型中
同样的,short类型,有符号数范围为-32768~32767,无符号数为0~65535
要注意的是:无符号数在作为循环中的判断条件时容易导致死循环。
三、浮点数在内存中的存储
1.浮点数的存储规则
根据国际标准IEEE(电气和电子工程协会) 754,任意一个二进制浮点数V可以表示成下面的形式:
(-1)^S * M * 2^E
(-1)^S表示符号位,当S=0,V为正数;当S=1,V为负数。
M表示有效数字,大于等于1,小于2。
2^E表示指数位。
IEEE 754规定:
对于32位的浮点数,最高的1位是符号位s,接着的8位是指数E,剩下的23位为有效数字M。
对于64位的浮点数,最高的1位是符号位S,接着的11位是指数E,剩下的52位为有效数字M。