文章目录
一、数据类型分类
类型的意义:
使用这个类型开辟内存空间的大小 (大小决定了使用范围)。
整形家族:
char short int long (都包括unsigned signed)
对char是整形家族是否感到诧异?
——字符本质是ASCII码值,是整形。
浮点数家族:
float double
结构类型:
数组类型 结构体类型(struct) 枚举类型(enum) 联合类型(union)
指针类型:
int *pi; char*pi; float*pi
void *pv——具有泛型,可以接受任意类型的地址,但void型指针不能直接解引用,也不 能 void*(pv + || - 整数)。
空类型:
void表示空类型(无类型)——通常运用函数的返回类型,函数的参数,指针的类型。
二、整形在内存的存储
2.1.原,反,补码
整数的三种的表示方法都有符号位和数值位,符号位是第一位,用0表示正,用1表示负。
无符号的都当作正整数,数值位正数的原 反 补码相同。
负整数
原码——按着正负数的形式翻译成二进制。
反码——符号位不变,其余按位取反。
补码——反码加一。
补码取反加一也可以得到原码哟!!!
对于整形来说:数据存放内存中其实存放的是补码。
2.2大小端
为啥20在内存应该显示是00 00 00 14,可最后显示的是14 00 00 00?
那是因为大小端的原因。
大端:
是指数据的低地位保存在内存的高地址中,而数据的高地址保存在内存的低地址中。
小端:
是指数据的低地位保存在内存的低地址中,而数据的高地址保存在内存的高地址中。
——大反小同
所以你知道为啥了吗?
那你想知道你自己的电脑存储是大端存储还是小端存储?
三、浮点数在内存的存储
3.1.存储规则
整数在内存的存储形式是反码,那浮点数呢?
那是因为浮点数在内存的存储的形式不是反码。
任意一个二进制浮点数v可以表示成下面的形式:
(-1)^S*M*2^E
——(-1)^S 表示符号位,S=0,v为正数,当S=-1,v为负数。
——M表示有效数字,大于等于1,小于等于2。
——2^E表示指数位。
是不是有点懵逼了? 别急,别急,那就举例子说明一下。
十进制的5.0,写成二进制是101.0,(别忘记了,小数点后面是二的负几次方)相当于(-1)^0*1.01*2^2。几次方可以类比十进制。
3.2.存储规定
我的图都好丑啊,丑萌萌的。
特别规定:
M只保留小数点后面的位。(读取的时候要把第一位的1加上)
指数E 如果是一个无符号整数,E要加上中间值(float的中间值是127,double的中间值是1023)。
E不全为0或不全为1,读数时即指数E的计算值减去中间值,再将有效数字M前加上第一位的1。
E全为0,读数时,指数E等于1减去中间值,有效数字M不再加上第一位的1。这样是还原0.0000……小数,无限接近0。
四、浮点数与整形存储差异举例