当前位置: 首页 > wzjs >正文

大众服务器网站优化营商环境条例心得体会

大众服务器网站,优化营商环境条例心得体会,网站分析内容,刚做的网站怎么收录文章目录 前言一、整数在内存中的存储1.1 计算机存储数据的基本单位示例代码 1.2 无符号整数的存储1.3 有符号整数的存储(补码)示例代码 二、大小端字节序和字节序判断2.1 什么是大小端?示例代码 2.2 为什么会有大小端?2.3 字节序…

文章目录

    • 前言
    • 一、整数在内存中的存储
      • 1.1 计算机存储数据的基本单位
        • 示例代码
      • 1.2 无符号整数的存储
      • 1.3 有符号整数的存储(补码)
        • 示例代码
    • 二、大小端字节序和字节序判断
      • 2.1 什么是大小端?
        • 示例代码
      • 2.2 为什么会有大小端?
      • 2.3 字节序的判断
    • 三、浮点数在内存中的存储
      • 3.1 IEEE 754 浮点数表示法
        • 示例代码(单精度浮点数)
      • 3.2 浮点数存储结构
      • 3.3 浮点数的存储和读取过程
        • 存储过程:
        • 读取过程:
    • 总结

前言

在计算机的世界里,所有数据最终都要存储到内存中,而内存是以 字节(Byte) 为单位进行存储的。不同类型的数据在内存中的存储方式可能不一样,甚至可能会涉及字节顺序(大小端)。理解这些存储原理不仅能帮助我们掌握计算机底层原理,还能提高编程和调试能力。

本文将带你从 整数大小端浮点数 三个方面,深入浅出地介绍数据在内存中的存储方式,并通过详细的示例代码加以说明。
在这里插入图片描述


一、整数在内存中的存储

整数(如 int 类型)的存储方式与其 二进制表示 密切相关。下面介绍计算机存储数据的基本单位,以及无符号整数和有符号整数(使用补码)的存储方式。

1.1 计算机存储数据的基本单位

计算机的存储是 二进制 的,最小的存储单位是 位(bit)。每 8 个 bit 组成 1 个字节(Byte)。

例如:

  • 1 bit:取值 01
  • 1 Byte = 8 bits:例如,00000000 表示十进制 000000001 表示十进制 1

计算机通常以 字节(Byte) 为单位存储数据,而整数通常占用 多个字节

示例代码
#include <stdio.h>int main() {int num = 5;printf("%d 在内存中的大小: %lu 字节\n", num, sizeof(num));return 0;
}

1.2 无符号整数的存储

无符号整数(unsigned int)只表示非负数,直接使用二进制表示。例如,假设 unsigned int 类型占 4 个字节(32 位):

十进制数二进制表示(32 位)
500000000 00000000 00000000 00000101
25500000000 00000000 00000000 11111111

可以看到,数值 5 存储为 00000101(低位在右,高位在左)。

1.3 有符号整数的存储(补码)

有符号整数(int)可以表示正数和负数。计算机通常采用 补码 来表示负数,这样可以使加减运算统一,并且只有唯一的零表示。

负数的补码计算过程:

  1. 将数值的绝对值转换为二进制原码。
  2. 对原码每一位取反(0 变 1,1 变 0)。
  3. 最后加 1,得到补码。
示例代码
#include <stdio.h>int main() {int num = -5;printf("%d 在内存中的存储: ", num);unsigned char *p = (unsigned char *)&num;for (int i = 0; i < sizeof(num); i++) {printf("%02X ", p[i]);}printf("\n");return 0;
}

通过该示例,你可以看到 -5 在内存中的存储(二进制补码表示)。


二、大小端字节序和字节序判断

对于多字节数据(如 intfloat),它们在内存中的存储顺序依赖于 CPU 架构,通常分为大端和小端两种模式。

2.1 什么是大小端?

  • 大端(Big Endian):高位字节存储在低地址,低位字节存储在高地址。这种方式符合人类阅读习惯,从左到右依次递减。
  • 小端(Little Endian):低位字节存储在低地址,高位字节存储在高地址,便于计算机进行加法等运算(从最低有效位开始)。
示例代码
#include <stdio.h>void print_bytes(int num) {unsigned char *p = (unsigned char *)&num;for (int i = 0; i < sizeof(num); i++) {printf("%02X ", p[i]);}printf("\n");
}int main() {int num = 0x12345678;printf("内存中的存储顺序: ");print_bytes(num);return 0;
}

根据你的 CPU 架构,你可能会看到:

  • 大端模式:输出类似 12 34 56 78
  • 小端模式:输出类似 78 56 34 12

2.2 为什么会有大小端?

大小端的区别主要来源于计算机体系结构的不同:

  • 大端模式:最早由 IBM 等体系架构采用,数据按人类阅读习惯存储(高位在前)。
  • 小端模式:主要由 Intel 体系架构采用,便于在进行算术运算时从低位开始处理数据,简化了硬件设计。

2.3 字节序的判断

可以通过一个简单的 C 语言程序来判断当前系统的字节序:

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

如果输出 “小端模式”,说明低位字节存储在低地址。


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

浮点数的存储采用 IEEE 754 标准,将浮点数拆分为符号位、指数位和尾数位。下面详细介绍 IEEE 754 浮点数表示法、存储结构以及存储和读取过程。

3.1 IEEE 754 浮点数表示法

IEEE 754 是国际通用的浮点数存储标准,主要分为两种格式:

  • 单精度浮点数(32 位)

    • 符号位(S):1 位,表示正负(0 表示正数,1 表示负数)。
    • 指数位(E):8 位,采用移码表示(偏移量为 127)。
    • 尾数位(M):23 位,存储有效数字,默认存在隐含的 1
  • 双精度浮点数(64 位)

    • 符号位(S):1 位
    • 指数位(E):11 位,偏移量为 1023。
    • 尾数位(M):52 位
示例代码(单精度浮点数)
#include <stdio.h>void print_float(float num) {unsigned char *p = (unsigned char *)&num;for (int i = 0; i < sizeof(num); i++) {printf("%02X ", p[i]);}printf("\n");
}int main() {float num = 3.14f;printf("3.14 在内存中的存储: ");print_float(num);return 0;
}

通过该示例,你可以看到 3.14 在内存中的字节序列,理解其 IEEE 754 格式的表示。

3.2 浮点数存储结构

以单精度浮点数为例,存储过程大致如下:

  1. 转换为二进制:将十进制数(例如 3.14)转换为二进制表示。
    例如 3.14 的二进制近似表示为 11.001001...

  2. 标准化:将二进制数调整为 1.xxxxx 的形式,同时记录指数。
    对于 3.14,标准化表示为 1.1001001... × 2^1

  3. 计算指数:将标准化指数加上偏移量(单精度偏移量为 127),得到最终的指数部分。
    对于上例:指数 1 + 127 = 128,其二进制表示为 10000000

  4. 处理尾数:舍去标准化表示中的隐含的 1,保留后面的有效位作为尾数。
    例如:尾数为 1001001...,填充到 23 位。

  5. 符号位:根据正负确定符号位(正数为 0,负数为 1)。

最终,3.14 会按照上述结构存储为 4 字节(32 位)的二进制数据。

3.3 浮点数的存储和读取过程

存储过程:
  1. 将十进制浮点数转换为二进制表示;
  2. 标准化成 1.xxx 的格式;
  3. 计算指数并加上偏移量;
  4. 提取尾数并构造 IEEE 754 格式;
  5. 将符号位、指数位和尾数位组合成最终的存储格式。
读取过程:
  1. 从内存中读取浮点数的 4 字节数据;
  2. 分析并提取符号位、指数位和尾数位;
  3. 将指数位减去偏移量(127)得到实际指数;
  4. 还原尾数(在前面补上默认的隐含 1);
  5. 根据符号位决定正负,最终还原为十进制浮点数。

总结

本文详细介绍了数据在内存中的存储方式,重点涵盖了:

  • 整数存储:理解无符号整数直接存储和有符号整数使用补码存储的原理。
  • 大小端字节序:了解大端与小端的概念、产生原因及判断方法。
  • 浮点数存储:通过 IEEE 754 标准,了解浮点数的符号位、指数位和尾数位的表示方法,以及存储与读取过程。

掌握这些知识,将帮助你更深入地理解计算机底层原理,并在调试和系统编程中更加得心应手。希望这篇博客能为你的学习提供实用的参考!

http://www.dtcms.com/wzjs/398733.html

相关文章:

  • 网络 网站建设营业推广
  • 做旅游攻略比较好的网站做推广网络
  • 网站设计的公司选哪家百度查找相似图片
  • 长春火车站到吉大一院宁波seo怎么推广
  • dede网站建设关键词排名快速提升
  • 网站建设合同doc北京网站制作建设公司
  • 上海手机网站建设电话爱站网使用体验
  • 网站的轮播图怎么做最好用的免费建站
  • 淘客手机端网站建设semikron
  • 购物网站开发需要什么技术怎么做好网络营销推广
  • 企业解决方案搞笑游戏行业seo整站优化
  • 关于做无机化学实验的网站百度sem推广
  • 做电商网站的怎样下载优化大师
  • 成品网站怎样建设厦门百度seo公司
  • 湘潭学校网站建设 x磐石网络网络营销方式有哪些?
  • 网站开发h5技术百度快照什么意思
  • 国家工业和信息化部网站备案系统游戏代理平台
  • ui设计师怎么做自己的网站免费的域名和网站
  • 广州网站建设网站优化推广深圳网站制作设计
  • 小程序商城制作流程宁波seo优化费用
  • 培训学校网站建设要点数据查询网站
  • 网站怎么做本地测试工具seo文章外包
  • 上海十大国企集团国外网站seo
  • 网站做简历模板手把手教你优化网站
  • 做网站的色彩搭配的小知识百度刷seo关键词排名
  • 柳市那些做网站的公司下载百度导航最新版本
  • 二手车网站怎么做域名查询138ip
  • 李连杰做的功夫网站沈阳seo排名优化推广
  • 新网站应该怎么做可以排名靠前免费的郑州网络推广服务
  • 《网页设计与网站建设》在线测试重庆seo网络优化咨询热线