MATLAB实战:5分钟搞定CW脉冲模糊函数图绘制(附完整代码)
2026/4/1 16:15:17
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
整数在计算机内存中是以二进制形式存储的,使用补码表示法。补码系统有以下特点:
例如,8位整数:
整数在内存中的存储遵循以下规则:
大小端存储:
对齐方式:
不同编程语言中的整数类型及其典型存储大小:
| 类型 | C/C++ | Java | Python | 存储大小 |
|---|---|---|---|---|
| 有符号8位 | char | byte | int | 1字节 |
| 无符号8位 | unsigned char | - | - | 1字节 |
| 有符号16位 | short | short | int | 2字节 |
| 无符号16位 | unsigned short | char | - | 2字节 |
| 有符号32位 | int | int | int | 4字节 |
| 无符号32位 | unsigned int | - | - | 4字节 |
| 有符号64位 | long long | long | int | 8字节 |
| 无符号64位 | unsigned long long | - | - | 8字节 |
注意:Python的int类型会自动扩展以适应大整数,实际存储大小会动态变化。
零的表示:
最小负数的表示:
溢出处理:
32位整数0xAABBCCDD在小端系统中的内存布局:
地址 内容 0x1000 DD 0x1001 CC 0x1002 BB 0x1003 AA理解整数在内存中的存储方式对于以下场景很重要:
字节序(Endianness)指的是多字节数据在计算机内存中的存储顺序。主要有两种类型:
大端字节序(Big-Endian):
小端字节序(Little-Endian):
字节序问题主要在以下场景中需要注意:
跨平台数据传输:
二进制数据处理:
调试和逆向工程:
#include<stdio.h>intmain(){unsignedintnum=0x12345678;unsignedchar*p=(unsignedchar*)#if(*p==0x12){printf("Big-Endian\n");}elseif(*p==0x78){printf("Little-Endian\n");}else{printf("Unknown Endianness\n");}return0;}importsysifsys.byteorder=='little':print("Little-Endian")else:print("Big-Endian")lscpu|grep"Endian"# 或echo-n I|od -to2|head-n1|cut-f2 -d" "|cut-c6# 输出1表示小端,0表示大端#include<arpa/inet.h>uint32_thtonl(uint32_thostlong);// 主机到网络(32位)uint16_thtons(uint16_thostshort);// 主机到网络(16位)uint32_tntohl(uint32_tnetlong);// 网络到主机(32位)uint16_tntohs(uint16_tnetshort);// 网络到主机(16位)importsocket value=0x12345678network_order=socket.htonl(value)# 主机序转网络序host_order=socket.ntohl(network_order)# 网络序转主机序32位整数的转换示例:
uint32_tswap_endian(uint32_tval){return((val<<24)&0xff000000)|((val<<8)&0x00ff0000)|((val>>8)&0x0000ff00)|((val>>24)&0x000000ff);}处理TCP/IP首部时需要注意:
常见二进制文件的字节序:
访问硬件寄存器时需要特别注意:
数据错位问题:
跨平台兼容性:
性能考虑:
调试技巧:
浮点数在内存中的存储遵循IEEE 754标准,该标准定义了浮点数的二进制表示格式。主要有两种格式:
单精度浮点数(32位):
双精度浮点数(64位):
IEEE 754标准还定义了特殊值的表示:
IEEE 754定义了四种舍入模式:
由于浮点数的二进制表示特性,会导致一些十进制小数无法精确表示,如:
在编程中需要注意:
避免直接比较浮点数相等
注意累积误差
选择合适的浮点类型
注意特殊值的处理
以上就是本文总结的内容,关于数据在内存中的存储。