c语言中数据的储存

  1. 数据的类型分类
  2. 整型的储存
  3. 大端与小端字节序
  4. 浮点型在内存中的存储

1.数据的类型分类

整型家族:

  1. char              1字节
  2. short             2字节
  3. int                 4字节
  4. long              4/8字节
  5. long long      8字节

char---------1.unsigned   char

                  2.signed     char            (编译器上默认的char是不是signed是取决于编译器的)

short--------1.unsigned  short  (int)

                  2.signed   short   (int)     

int-----------1.unsigned   int    

                 2.signed      int(int 类型默认有字符)

long---------1.unsigned    long    (int)

                  2.signed long (int)

浮点型家族:

float----------4字节

double------8字节

构造类型(自定义类型):

  1. 数组类型
  2. 结构体类型
  3. 枚举类型
  4. 联合类型
  5. 指针类型
  6. 空类型

数组类型中:int[10]是数组类型 

指针类型:int*pf;

                  char*pc;

                  float*pf;

                  void*pv;

空类型:void表示空类型(无类型)

通常应用于函数的返回类型,函数的参数,指针。

2.整型的储存:整数的二进制表示形式:原反补三种表示方法均有符号位数值位

原码:第一位为符号位剩下的按整型的二进制的形式写出

反码:符号位不变,其余位按位取反

补码:反码加1.

为什么整型的储存是用补码的二进制进行储存?

解:是用补码,可以将符号位和数值位进行统一处理。

加法减法也可进行统一处理(cpu只有加法器)此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路。

3.大端与小端字节序

字节序(字节储存的顺序)

大端字节序:把一个数据的低字节的数放在高地指出,高字节的数据放在低地址处。

小端字节序:把一个数据的低字节的数放在低地址处,高字节的数据放在高地址处。

我的理解

大端字节序:大(高)字节从低地址按顺序放入

小端字节序:小(低)字节从低地址按顺序放入

制作一个程序判断大小端

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

 这个程序说明了浮点型的储存处和整型的存储方式的规则不一样

IEE754规则 任意一个浮点数V科表示:

(-1)^S*M*2^E

(-1)^S表示符号位,当S=0时,V为正数;当S=1时,V为负数。

M表示有效数字,大于等于1,小于2

2^E表示指数位。

十进制5.5------>101.1-------->1.011*2^2--------->S=0,M=1.011,E=2

float(32位浮点型)

最高一位是符号位S,接着八位是指数E,剩下的23位为有效数字M

double (64位的浮点型)

对于64位的浮点数,最高的1位是符号位S,接着的11位为指数位E,剩下的52位为有效数字M

 

IEE754中M固定为1.xxxx(XXXX)为小数部分,所以可以省略1只保留小数点后面几位。

浮点数不能精确保存:

  1. 5.3------->101.0101…………达到M最大限度后也无法保存
  2. E规定为一个无符号整数,意味着E为8位取值范围为0-255;E为11位,取值范围为0-2047

科学计数法中E可以是负数的,所以IEE754中规定,存入内存中须加上一个中间值。对于8位E来说:中间值为127,对于11位E来说,这个中间值为1023。

比如:八位的E来说-1存放为127+(-1)=126

                               10存放为127+   10  =137

           十一位来说-1存放为1023+(-1)=1022

                             10存放为1023+  10  =1033

E从内存中取出有三种方法

1.E不为全0或者全1

按照规则指数E计算出值减127(或1023),得到真实值,再将有效数字M前加上第一位

2.E为全0

浮点数指数E等于-127(或-1023)即真实值。

有效数字M前不加上1而是为0.xxxxx的小数(为了不表示正负0)以及接近于0的很小的数字。

指数为-127已经表示很小的数字了。

3.E为全1

此时表示一个非常大的数字。表示正负务求大。

因此回头看:

 补充:

有字符和无字符char的存储

 附笔记:

 

 

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值