C语言----数据在内存中的存储
一、数据类型
整形类型
浮点型
自定义类型
指针类型
空类型
二、整形在内存中的存储
原码、反码、补码
-
计算机中整数的三种二进制表示:原码、反码、补码(符号位+数值位)
-
正数的原码、反码、补码都相同;
-
负整数的原码:数值直接化为二进制得到原码;负整数的反码:符号位不变,其余位按位取反;负整数补码:反码+1。
-
整形:数据存放在内存中存放的是补码。使用补码,可以将符号位与数值统一处理,也可以将加减法统一处理。
-
计算实例:
大小端
-
当一个数值超过一个字节时,要存储到内存中去,就会有一个存放顺序,大小端字节序解决了存放顺序的问题。(在计算机系统中,一个字节对应一个地址单元,当数据大于一个字节时,就需要对多个字节的数据排序,于是有了大小端字节序,其中Windows和linux的x86和x64、 ARM 、 DSP是小端;而Java、所有网络协议、keil c51是大端;C/C++跟编译平台所在的cpu相关。)
-
大端字节序:数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中。
-
小端字节序:数据的低位保存在内存的低地址中,而数据的高位,保存在内存的高地址中。
-
内存中存放的是补码;整形表达式计算使用内存中的补码进行计算;打印和我们看到的是原码
-
实例:
-
判断 :是还是大小端字节序。
-
计算机中存储用补码,补码的实际表示如图:
三、浮点型在内存中的存储
- 可以在limit.h和float.h文件中查看有关整形和浮点数大小的定义。
浮点数存储规则
- 存储
根据国际标准IEEE(电气和电子工程协会)754,任意一个二进制浮点数V可以表示成以下形式:
- (-1)^ S * M * 2 ^ E
- (-1)^ S表示符号位,当S = 0, V为正数 ; 当S = 1, V为负数;
- M表示有效数字,大于等于1,小于2.
- 2 ^ E表示指数位。
-
图示:
-
实例:
v = 5.5
= 101.1 (2 ^2 + 2 ^1+ 2 ^(-1))
= 1.011 * 2^2
=(-1) ^ 0 * 1.011 * 2 ^ 2
其中:S = 0; M = 1.011 ; E = 2;
- 取出
-
第一种情况
-
第二种情况
-
第三种情况
- 实例