1.基本数据类型
数据类型可以理解为固定内存大小的别名,数据类型是创建变量的模子
变量是实际连续内存的别名,程序中通过变量来申请并命名存储空间。通过变量的名字可以使用存储空间。
2.数据类型的符号
2.1有符号数
数据类型的最高位用于标识数据的符号
最高位为1,表明这个数是负数
最高位为0,表明这个数是正数
在计算机内部用补码表示有符号数
- >正数的补码是正数本身。负数的补码是为负数的绝对值的各位取反+1。
2.2无符号数
计算机内部用原码表示无符号数(无符号默认为正数,无符号数没有符号位)
2.3signed 和 unsigned
c 语言中默认变量默认为有符号类型
unsigned 关键字声明变量为无符号类型
- c 语言中只有整数类型能够声明 unsigned 变量。
- 当无符号数和有符号数混合计算时候,会将有符号数转换为无符号数在进行计算,结果为无符号数。
3.1 关于浮点数
浮点数在内存的存储方式为:符号位,指数,尾数
float 与 double 类型的数据在计算机内部的表示法是相同的,但是由于所占存储空间的不同,其分别能够表示数值范围和精度不同。
3.2 浮点数的转换
1.将浮点数转换成二进制
2.用科学计数法表示二进制浮点数
3.计算指数偏移后的值
注意:计算指数的时候需要加上偏移量,而偏移量的值与类型有关
对于 float 加上偏移值 127
对于double 加上偏移值 1023
8.25 在内存中的表示
8.25 的二进制表示:1000.01 -> 1.00001 * (2 ^ 3)
符号位: 0
指数:127 + 3 = 130 -> 130 ->10000010
小数:00001
在内存中的表示方法 0 1000010 00001000000000000000000000000000
有趣的问题
对于 32 位的系统,int 和 float 都占用 4 个字节的内存,为什么 float 却比 int 的范围广。
3.3 浮点类型的总结
1.float 的表示的具体的数字的个数与 int 不同
2.float 可表示的数字之间是不连续的,存在间隙
3.float 只是一种近似的表示法,不能作为精确数使用
4.由于内存表示相对复杂, float 的运算速度比 int 慢的多
double与float具有相同的内存表示法,因此double也是不精确的。由于double占用的内存较多,所能表示的精度比float高。
// 浮点类型运算的时候 0 的定义
#define ZERO 0.000000000000001