数据在内存中的存储

 一、数据类型

      1、整型数据

            char--unsigned char    signed char---1字节

            short--unsigned short    signed short--2字节

           int -- unsigned int            signed int---4/8字节(取决于32位/64位编译器)        

           long -- unsigned long      signed long--4字节

      2、浮点型数据

          float --4字节

         double--8字节  

       3、自定义类型

        数组类型

        结构体类型 struct

        枚举类型enum

        联合类型 union

       4、指针类型--4/8字节(取决于32位/64位编译器)     

        整型指针 int*pi

        字符型指针 char *pc

        浮点型指针 float*pf

        空指针 void* pv

二、数据在内存中的存储

        1、整型数据在内存中的存储

          整型数据二进制表示方法分为三种:原码,反码和补码。

          整型数据在内存中以补码的形式存储!

          正整数的原码、反码和补码相同。

         例如:int a = 10;

          负整数的原码、反码和补码需要计算。

      整型数据在内存中以补码的形式存储!为什么呢?

      因为如果使用原码进行计算得到的结果是错误的,而使用补码计算结果正确。下面举例说明:

      展示计算机计算(1-1)的过程:

      知识点1:CPU上只有加法运算器,因此计算1-1要转化为1+(-1)

     ①使用原码计算过程

      ②使用补码计算的过程

三、大小端字节序

        1、字节序

            字节序是以字节为单位,讨论存储的顺序

        2、小端字节序存储:

                                        低位字节内容   ----->   低地址处

                                        高位字节内容  ------>   高地址处

             例如:int a = 4;VS编译器中16进制显示为0x00000004,

                                                                    高位         低位

                     低位的04放入低  地址处,高位的00放入高地址处。

        3、大端字节序存储

                                        低位字节内容   ----->   高地址处

                                        高位字节内容  ------>   低地址处

                   例如:int a = 4;VS编译器中16进制显示为0x00000004,

                   低位的04放入低高地址处,高位的00放入低地址处。

            4、编写代码判断计算机是大端字节序还是小端字节序

             

#include<stdio.h>
int main()
{
	int a = 1;
	char* p = (char*)&a;//强制类型转换
	*p = 0;
	if (a)
	{
		printf("大端");
	}
	else
	{
		printf("小端");

	}
	return 0;
}

五、有符号数和无符号数的存储

           涉及到整型提升和算术转换

            1、char--表示有符号数还是无符号数取决于编译器

              ①signed char

           

                ②unsigned char

                    

                   2、short

                     ①signed short

                 ②unsigned short

                   3、int

                      同理可得。

                   4、整型提升例题

 

六、浮点型数据在内存中的存储

          IEEE754规定:任何一个浮点数V都可以表示为:

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

                                                        ◆S为0表示正数,1表示负数

                                                       ◆M为有效数字

                                                       ◆2^E表示指数维

例:5.5-----10进制表示的浮点数

     101.1-----2进制表示的浮点数(1*2^2+0*2^1+1*2^0+1*2^(-1)=5.5)

     =1.011*2^2

     ◆S=1(正数)

     ◆E = 2

     ◆M = 1.011

   因此,浮点型数据的存储只要存S,M,E即可

S以0或1存入第一高位,E+127存入后面8个比特位,M去掉小数点前的1后存入后面23位。

用例子进一步说明:

#include<stdio.h>
int main()
{
	int n = 9;
	float* pf = (float*)&n;
	printf("n的值为:%d\n", n);
	printf("*pf的值为:%f\n", *pf);
	*pf = 9.0;
	printf("n的值为:%d\n", n);
	printf("*pf的值为:%f\n", *pf);
	return 0;
}

打印结果为:

why!

读取时的特殊情况:

1、E的8个比特位为全0时,规定E为1-127=-126,有效数字M小数点前不再补1,而是补0变成0.xxxxx,表示的浮点数无限接近于0.

2、E的8个比特位为全1时,,表示±无穷大。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值