关于大、小端的那些事

简介: 关于大、小端的那些事

什么是大、小端


大端(存储)模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在地址的低地址中。

小端(存储)模式,是指数据的低位保存在内存的低地址中,而数据的高位,保存在地址的高地址中。


图解


我们知道,在内存中数据的存储及计算都是通过转化为二进制来进行的,为了方便我们直观感受电脑都会转化为16进制来表示出来,如下图:


d1afd090579a656ab56c7e20c32d239d_8f7a949aef28409b8e67316ed8796dfd.jpg


我们可以看出它是字节为单位来存储的(一个 int 型有4个字节,一个字节八个比特位,4个比特位存储一个十六进制的数)低位的44存在地址:0x00CFFBF0处,高位的11存在0x00CFFBF3处,这就是小端字节序存储。


大、小端存储模式如下图:


8778f9b8204f49298ea5652dcf5932c0_ebc0f812bb7b47e1a6e4a181a1570356.jpg


如何用代码来测试当前机器的字节序?


假设用 1 来测试,那么写成 16 进制就是 0x00000001,我们假设它是小端字节序存储,那么由之前的分析可以得出,地址由低到高第一个字节存储的应该是01,大端则为00.

由此,我们可以写出如下代码:


#include<stdio.h>
int main()
{
  int a = 1;
  char* p = (char*)&a; //强制类型转换,&a本为int*类型,转为char*型
  if (*p == 1)         //这样就能解引用访问第一个字节
  printf("小端");
  else
  printf("大端");
  return 0;
}


我们还可以简化一下,如下:


#include<stdio.h>
int main()
{
  int a = 1;
  if (*(char*)&a == 1)     //转换完直接解引用
  printf("小端");
  else
  printf("大端");
  return 0;
}


以上便是本期内容了,希望对您有所帮助,如有错误还请大佬指正。


相关文章
|
算法 安全 网络安全
非对称加密算法
非对称加密算法,如RSA、ECC、Diffie-Hellman、ElGamal和DSA,使用公钥/私钥对保证安全。公钥可公开,用于加密;私钥保密,用于解密和签名。这种算法在SSL/TLS、数字证书、签名、加密货币等领域广泛应用,提供更高安全性。
528 1
蜂窝网络下行链路的覆盖率和速率性能matlab仿真分析
此程序在MATLAB2022a环境下运行,基于随机几何模型评估蜂窝网络的下行链路覆盖率和速率性能。通过模拟不同场景下的基站(BS)配置与噪声情况,计算并绘制了各种条件下的信号干扰加噪声比(SINR)阈值与覆盖率概率的关系图。结果显示,在考虑噪声和不同基站分布模型时,覆盖率有显著差异,提出的随机模型相较于传统网格模型更为保守但也更加贴合实际基站的分布情况。
|
11月前
|
机器学习/深度学习 自然语言处理 PyTorch
从零开始构建nlp情感分析模型!
本教程介绍了如何使用PyTorch和Hugging Face的Transformers库构建一个情感分析模型。主要内容包括导入所需库、读取训练数据集、加载预训练的BERT模型和分词器、定义情感数据集类、划分训练集和验证集、创建数据加载器、设置训练参数、训练模型、评估模型性能以及定义和测试预测函数。通过这些步骤,可以实现一个简单而有效的情感分析模型。
883 2
|
存储 并行计算 测试技术
NumPy 性能优化:提升 Python 数值计算的速度
【8月更文第30天】Python 是一种广泛使用的编程语言,在科学计算领域尤其受欢迎。然而,由于 Python 的动态类型和解释执行机制,其在处理大规模数值数据时可能会显得相对较慢。为了克服这一限制,NumPy(Numerical Python)库提供了高性能的多维数组对象以及一系列用于操作这些数组的函数。本文将探讨如何利用 NumPy 来提高 Python 中数值运算的效率。
1140 1
|
运维 监控 负载均衡
什么是系统可用性?如何提升可用性?
本文探讨了系统可用性的概念、计算方法及其重要性。可用性指系统能在预定时间内正常运行的比例,计算公式为:(运行时间)/(运行时间+停机时间)。文章列举了不同级别的可用性对应的停机时间,并介绍了提升系统可用性的多种策略,包括冗余设计、故障检测与自动恢复、数据备份与恢复、负载均衡、容错设计、定期维护与更新及使用高可用性云服务和网络优化。这些措施有助于构建更加稳定可靠的系统。
1823 0
|
Java Maven Perl
解决Maven父子多模块打包互相引用打包:必须父模块才能打包成功,单个子模块无法打包成功问题(会提示找不到)
解决Maven父子多模块打包互相引用打包:必须父模块才能打包成功,单个子模块无法打包成功问题(会提示找不到)
1802 4
|
存储 运维 网络协议
网络基础运维面试必备的知识点(1)
网络基础运维面试必备的知识点(1)
|
Oracle Java 关系型数据库
Java中关于win下的环境变量以及不同版本JDK自由切换的原理分析,授人以渔
Java中关于win下的环境变量以及不同版本JDK自由切换的原理分析,授人以渔
487 0
Java中关于win下的环境变量以及不同版本JDK自由切换的原理分析,授人以渔
|
机器学习/深度学习 搜索推荐 数据挖掘
第一代图卷积网络:图的频域网络与深度局部连接网络
第一代图卷积网络:图的频域网络与深度局部连接网络
328 0
第一代图卷积网络:图的频域网络与深度局部连接网络