【C语言】数据在内存中的存储

目录:

1、整数在内存中的存储

2、大小端字节序

2.1、什么是大小端?

2.2、什么是 “高/低位字节” 和“高/低地址 ”  呢?

           练习1
           练习2

3、浮点数在内存中的存储


正文

1、整数在内存中的存储

整数的二进制表示方法有:原码、反码、补码。

其中对有符号整数来说:这三种表示方法都分为符号位和数值位两部分。数值位的最高一位是符号位,用0表示‘正’,1表示‘负’。

正数:原码、反码、补码均相等,三码合一。

负数:

原码:直接将数值转换为二进制,得到的就是原码

反码:原码的符号位不变,其他位按位取反

补码:反码+1

整数在内存中以补码的形式储存。

2、大小端字节序

补码在存储时存在大小端问题  

2.1、什么是大小端?

超过一个字节的数据在内存中存储时,就有存储顺序的问题,按照不同的存储顺序,可分为大端字节序存储和小端字节序存储。

大端模式:数据的低位字节的内容保存在内存的高地址处,而数据的高位字节内容,保存在内存的低地址处。

小端模式:数据的低位字节的内容保存在内存的低地址处,而数据的高位字节内容,保存在内存的高地址处。

2.2、什么是 “高/低位字节” 和“高/低地址 ”  呢?

高/低位字节:

举一个十进制数的例子:  135 中数字自右向左依次为 个位、十位、百位, 其中 5 为个位数,称为低位;1 为百位数,称为高位。即数字自右向左,位数增高。

高/低地址:

在内存中,自左向右 地址逐渐增高。

注意:1、整数在内存中以补码的形式进行储存。 

           2、在调试窗口中观察内存时,为观察方便,显示的是16进制

请看一下例子:

在不同的编译环境下,大小端存储模式不同。

大小端存储只是机器在存储时有区分,在取出存储的数据时,取出的数据是相同的,还是那个数据。

练习1:写一段代码,来判断当前机器的字节序。

判断思路:

在强制类型转换为char时,取出一个字节的数,会将低地址的数据取出。

 我们只需要将一个数的一个字节取出进行判断。

 

#include <stdio.h>
int check_sys()
{
	int a = 1;
	return (*(char*)&a);
}
int main()
{
	int ret = check_sys();
	if (ret == 1)
	{
		printf("小端\n");
	}
	else
		printf("大端\n");
	return 0;
}

练习2:根据代码,得出其打印的值 

前提:该环境为小端存放。

 

ptr1[-1]  ==   *(ptr1 - 1) 

最后的打印结果为   4  2000000

3、浮点数在内存中的存储

浮点数与整型在内存中的存储方式不同。

根据国际标准,任意一个二进制浮点数V可以表示成下面的形式:

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

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

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

2^E  表示指数位

十进制 0.5    写成二进制为 0.1,转换为二进制的科学计数法为   1.0*2^-1

十进制 5.0    写成二进制为 101.0,转换为二进制的科学计数法为   1.01*2^2

 

相关推荐

  1. C语言L / 数据内存存储

    2024-04-01 13:38:02       31 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-01 13:38:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-01 13:38:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-01 13:38:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-01 13:38:02       18 阅读

热门阅读

  1. flask+uwsgi+云服务器 部署服务端

    2024-04-01 13:38:02       22 阅读
  2. 【微服务篇】分布式事务方案以及原理详解

    2024-04-01 13:38:02       16 阅读
  3. 多线程(24)Future接口

    2024-04-01 13:38:02       15 阅读
  4. 设计模式之策略模式

    2024-04-01 13:38:02       12 阅读
  5. Spark数据倾斜解决方案

    2024-04-01 13:38:02       16 阅读
  6. 如何用Redis实现消息队列

    2024-04-01 13:38:02       19 阅读
  7. Codeforces Round 932 (Div. 2)(A,B,C,D)

    2024-04-01 13:38:02       16 阅读
  8. [蓝桥杯 2016 国 C] 赢球票

    2024-04-01 13:38:02       17 阅读
  9. 专升本-大数据

    2024-04-01 13:38:02       18 阅读