c基础知识 && 快速扫描

1.基本数据类型

数据类型可以理解为固定内存大小的别名,数据类型是创建变量的模子
变量是实际连续内存的别名,程序中通过变量来申请并命名存储空间。通过变量的名字可以使用存储空间。

2.数据类型的符号

2.1有符号数

数据类型的最高位用于标识数据的符号

最高位为1,表明这个数是负数
最高位为0,表明这个数是正数
在计算机内部用补码表示有符号数

  1. >正数的补码是正数本身。负数的补码是为负数的绝对值的各位取反+1。

2.2无符号数

计算机内部用原码表示无符号数(无符号默认为正数,无符号数没有符号位)

2.3signed 和 unsigned

c 语言中默认变量默认为有符号类型
unsigned 关键字声明变量为无符号类型

  • c 语言中只有整数类型能够声明 unsigned 变量。
  • 当无符号数和有符号数混合计算时候,会将有符号数转换为无符号数在进行计算,结果为无符号数。

3.1 关于浮点数

浮点数在内存的存储方式为:符号位,指数,尾数
c基础知识 && 快速扫描

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 的范围广。
c基础知识 && 快速扫描

3.3 浮点类型的总结

1.float 的表示的具体的数字的个数与 int 不同
2.float 可表示的数字之间是不连续的,存在间隙
3.float 只是一种近似的表示法,不能作为精确数使用
4.由于内存表示相对复杂, float 的运算速度比 int 慢的多

double与float具有相同的内存表示法,因此double也是不精确的。由于double占用的内存较多,所能表示的精度比float高。

// 浮点类型运算的时候 0 的定义
#define ZERO 0.000000000000001

4.1类型转换

猜你喜欢

转载自blog.51cto.com/13731480/2565692