剖析数据在内存中的存储!

深度剖析数据在内存中的存储,从以下四个方面展开:

  1. 数据类型的介绍
  2. 整形在内存中的存储:原码、反码、补码
  3. 大小端字节序介绍及判断
  4. 浮点型在内存中的存储

> 1. 数据类型的介绍

C语言中九种基本数据类型:
剖析数据在内存中的存储!_第1张图片
void 表示空类型(无类型)
通常应用于函数的返回类型、函数的参数、指针类型。void不能定义变量,可以充当函数的返回值。
而void既可以定义变量,也可以赋值,但void对应的变量不能被直接解引用。void*常用来接收任意类型的指针。

> 2.整形在内存中的存储:原码、反码、补码

计算机中的有符号数有三种表示方法,即原码、反码和补码。
三种表示方法均由符号位和数值位两部分组成,符号位都是用0表示“正”,用1表示“负”,而数值位三种表示方法各不相同。
*正数的原、反、补码都相同。
对于整形来说:数据存放内存中其实存放的是补码。
原码
直接将二进制按照正负数的形式翻译成二进制就可以。
反码
将原码的符号位不变,其他位依次按位取反。
补码
反码+1就是补码。

> 3. 什么是大小端

大端(存储)模式:是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中;
小端(存储)模式:是指数据的低位保存在内存的低地址中,而数据的高位,,保存在内存的高地址中。

> 4. 浮点型在内存中的存储

任意一个二进制浮点数都可以表示成下面的形式:
(-1)^S * M * 2^E
(-1)^S表示符号位,当S=0,为正数;当S=1,为负数。
M表示有效数字,大于等于1,小于2。
2^E表示指数位。
当E全为0时,表示±0以及接近0的很小的数字;
当E全为1时,表示±无穷大。

举例来说: 十进制的5.0,写成二进制是 101.0 ,相当于 1.01×2^2 。 那么,按照上面的格式,可以得出S=0,M=1.01,E=2。

IEEE 754规定: 对于32位的浮点数,最高的1位是符号位s,接着的8位是指数E,剩下的23位为有效数字M。
在这里插入图片描述
IEEE 754对有效数字M和指数E,有一些特别规定:
1.以32位浮点数为例,留给M只有23位,将第一位的1舍去以后,等于可以保存24位有效数字。
2.存入内存时E的真实值必须再加上一个中间数,对于8位的E,这个中间数是127;对于11位的E,这个中间数是1023。
比如,2^10的E是10,所以保存成32位浮点数时,必须保存成10+127=137,即10001001。

你可能感兴趣的:(笔记,学习)