C语言?大小端!!!

一、什么是大小端?

大小端是内存层面的概念,描述了数据在内存中存储时数据的高低字节与高低内存的对应关系,这是存储是必须要统一的问题

  • 大端是指数据的低字节存储在高地址,高字节存储在低地址
  • 小端是指数据的低字节存储在低地址,高字节存储在高地址

大小端机在各个场景下都有使用,常见的X86环境下就是小端机,51单片机就是大端机

二、如何确定一台机器是大端还是小端机?

如何确定一台机器是打断还是小端机核心是要想办法如何对于一个数据操作它的各个字节,这就让我们想到两种方法:

  1. 利用char 类型指针,char类型指针在访问时会访问单个字节,这时候我们只需要使用char 类型指针来访问一个int类型数据就可以知道当前机器是大端还是小端机了:
C++ 复制代码
#include <iostream>
using namespace std;
int main() {
    int a = 1;
    char* pi = (char*)&a;
    cout << (int)*pi << endl;
    return 0;
}

代码运行结果如下:

  1. 利用union 联合体的特性,我们知道,联合体中多个数据使用同一块空间,这样我们只要保证一个联合体中两个数据类型有一个是char另一个是多字节类型即可,代码如下:
C++ 复制代码
#include <iostream>
using namespace std;
union A {
    char b;
    short a;
};
int main() {
    A ua;
    ua.a = 1;
    cout << (int)ua.b << endl;


    return 0;
}

代码运行结果如下:

可以看到,上面两段代码运行结果是相同的,那么它们为什么会输出1呢?又说明了我现在所使用的是一台什么机器呢?

事实上,两种方法通过不同的方式取到了int a 存储在低地址的数据,而展示出来的是1,也就是第字节的数据,所以这意味着我的机器是低地址对应低字节,也就是小端机

结语

这就是本期关于大小端的所有知识点了,快去测测你的机器是大端机还是小端机!

相关推荐
宵时待雨2 分钟前
C语言笔记归纳21:编译与链接
linux·c语言·开发语言·笔记
天勤量化大唯粉4 分钟前
基于距离的配对交易策略:捕捉价差异常偏离的均值回归机会(天勤量化代码实现)
android·开发语言·python·算法·kotlin·开源软件·策略模式
Q741_1475 分钟前
Linux 进程核心解析 fork()详解 多进程的创建与回收 C++
linux·c++·面试·笔试·进程
白昼流星!8 分钟前
C++ 封装的经典实践:从立方体到点圆关系的面向对象思考
c++
leiming68 分钟前
c++ 利用模板创建一个可以储存任意类型数据的数组类
开发语言·c++·算法
无敌最俊朗@8 分钟前
音视频C++开发进阶指南
开发语言·c++·音视频
Bruce_Liuxiaowei10 分钟前
Python 跨平台 Nmap 自动化扫描工具:从手动到一键批量扫描
开发语言·python·网络安全·自动化
派大鑫wink12 分钟前
【Day1】Java 入门:开发环境搭建(JDK 安装 + IDEA 配置 + HelloWorld 实战)
java·开发语言·intellij-idea
lingran__12 分钟前
C语言内存函数详解
c语言·开发语言
lsx20240613 分钟前
R JSON 文件
开发语言