一、数据类型介绍
数据类型以及他们所占存储空间的大小:
用sizeof()即可得出数据类型所占存储空间的大小。
如何看到各个类型的使用范围呢?
#include <limits.h>
int main()
{
INT_MAX;
return 0;
}
右键INT_MAX转到声明即可看到各个数据类型的适用范围大小
二、数据类型的基本归类
1.整形家族
char
unsigned char //无符号
signed char //有符号(一般情况下char=signed char)
short
unsigned short
signed short
int
unsigned int
signed int
long
unsigned long
signed long
2.浮点数家族
float
double
3.构造类型
数组类型 如:int [] 、char []
结构体类型 struct
枚举类型 enum
联合类型 union
4.指针类型
int *pi
char *pc
float *pf
void *pv
5.空类型
void 表示空类型(无类型)
三、整形在内存中的存储
我们知道整数在计算机中是以二进制来表示的,既原码、反码和补码。
三种表示方式都有符号位和字符位两部分,符号位的‘0’表示正,‘1’表示负
正数的原码、反码和补码都相同。
而负数的原码、反码和补码的表示方法如下:
原码
直接按数值翻译成二进制的形状
反码
按原码的符号位不变,其余的按位取反
补码
反码+1可得到补码
对于整形来说:数据存放内存中的是补码
int main()
{
int a = 10;
int b = -10;
return 0;
}
a在内存中的存储
b在内存中的存储
大小端介绍
从数据在内存中的存储可看出,数据的位次和16进制的表达顺序不同,这是因为计算机中有大端存储模式和小端存储模式。
大端(存储) 模式:数据的低位保存在内存的高地址,数据的高位保存在内存的低地址
小端(存储) 模式:数据的低位保存在内存的低地址,数据的高位保存在内存的高地址
我们可以用下面的代码来判断当前机器用的是大端还是小端
int main()
{
int i = 1;
if ((*(char*)&i) == 1)
printf("小端\n");
else
printf("大端\n");
return 0;
}
四、浮点数在内存中的存储
根据国际标准IEEE,任意一个二进制浮点数可表示为以下形式
(-1)^S*M*2^E
(-1)^S表示符号位
M表示为有效数值
2^E表示指数位
对于32位的浮点数,最高的一位为符号位,接着8位是指数E,剩下的23位为有效数字M
对于64位的浮点数,最高的一位为符号位,接着的11为是指数E,剩下的52位为有效数字M
对于有效数字M的规定
M可以写出1.xxxx的形式,其中xxxxx为小数部分
在计算机中,默认第一个数为1,可以被舍去,只保留xxxx的部分
对于指数E的规定
E不全为或不全为1
既指数E的计算值减去127(或1023),得到真实值,再将有效数字M前加上第一个
E全为0
这时浮点数的指数E等于1-127(或1-1023)既为真实值
E全为1
这时,如果有效数字M全为0,则表示无穷大。
例子:
9.0->1001.0->S=0,M=1.001,E=3+127=130
转换成二进制
0 10000010 00000000000000000001001
S E M