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

数据的存储--->【大小端字节序】(Big Endian)(Little Endian)

⛩️博主主页:@威化小餅干
📝系列专栏:【C语言】藏宝图
🎏 ✨绳锯⽊断,⽔滴⽯穿!一个编程爱好者的学习记录!

前言

计算机硬件有两种存储数据的方式:

  • 大端字节序——Big Endian

  • 小端字节序——Little EEndian

字节序,就是计算机存储多字节数据的方式。

一、大小端字节序名字来源

关于“little endian(小端)”和“big endian(大端)”的由来,网传有一个有趣的故事,可以追溯到1726年的Jonathan Swift的《格列佛游记》,其中一篇讲到有两个国家因为吃鸡蛋究竟是先打破较大的一端还是先打破较小的一端而争执不休,甚至爆发了战争。
《格利佛游记》:“Lilliput和Blefuscu这两个强国在过去的36个月中一直在苦战。战争的原因是:我们都知道,吃鸡蛋的时候,原始的方法是打破鸡蛋较大的一端,可是那时的皇帝的祖父由于小时侯吃鸡蛋,按这种方法把手指弄破了,因此他的父亲,就下令,命令所有的子民吃鸡蛋的时候,必须先打破鸡蛋较小的一端,违令者重罚。然后老百姓对此法令极为反感,由此发生了多次叛乱,产生叛乱的原因就是另一个国家Blefuscu的国王大臣煽动起来的。叛乱平息后,流亡的人就逃到这个帝国避难。据估计,先后几次有11000余人情愿死也不肯去打破鸡蛋较小的端吃鸡蛋。”

二、什么是大小端

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

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

🤔不懂?请看下图解析

int i = 1;

在64位的平台中,找到i 的地址为:0x00000E810BDF454,内存中存放着01 00 00 00。有没有发现它是倒着存的,这其实就是小端存储。

【1】、小端

判断大小端是以字节来看的,如16进制数0x11223344,则11相对于其它是高位,就好比十进制123,1是百位,2是十位,3是个位,则1相对于2、3,为高位请看下面的图解。

大小端是由底层硬件决定的,那怎样看是不是小端?

  • 一句话——>“低 低 ->为小”

数据的低位放在内存的低位,则为小端。一般我们去内存中查看数据时,小端一般是倒着存放的,如下图


【2】、大端

大端:将数据的低位保存在内存的高位地址中,而数据的高位保存在内存的低地址中。


三、大厂笔试题

设计一个小程序来判断当前机器的字节序

解法思路:

  • 判断该机器为大小端存储模式,既需要判断存进去一个数据存储的顺序为数据本身顺序还是逆顺序

  • 如创建一个变量i:int i = 1,看它存进去的是00 00 00 01还是01 00 00 00,再进一步想,只需要判断最低位为00还是01,就可以判断大小端了。我们可以利用强制类型转换,让char*来得到这个第一位的数值,再判断是01后输出即可。

解题代码:

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

完结

✨✨请各位小伙伴多多点赞关注收藏支持鸭!✨✨

http://www.lryc.cn/news/35648.html

相关文章:

  • 软件测试备战近三银四--面试心得
  • 《Linux运维实战:ansible中的变量定义及以及变量的优先级》
  • useEffect 通过 form.getFieldValue(‘xxx‘) 监听 Form表单变化
  • 【晓龙oba出品 - 黑科技解题系列】- 最小操作次数使数组元素相等
  • Activity的启动和结束
  • 利用业务逻辑+OB分布式特性优化SQL
  • 哈希表
  • 基于Halcon的MLP(多层感知神经网络)分类器分类操作实例
  • VR全景博物馆,打造7*24小时的线上参访体验
  • Go 数据类型
  • Mybatis-Plus学透?一篇足够(持续更新中)
  • 船用燃料油市场调研报告-主要企业、市场规模、份额及发展趋势
  • python趣味编程-奥赛罗游戏
  • 经典卷积模型回顾13—ResNetXt实现图像分类(matlab)
  • Spring学习——Maven进阶
  • 第23篇:基础知识-Java Switch Case
  • Go 实现多态和 参数的动态个数及动态类型
  • vue 指令
  • APP违法违规收集使用个人信息合规评流程和范围
  • 【力扣2379】 得到 K 个黑块的最少涂色次数(c++100%)
  • [2.2.2]进程调度的时机、方式、切换与过程
  • 第24篇:Java包装类知识深度分析
  • 常见问题整理1
  • 体验Linux 块设备驱动实验(模拟块)
  • 一文搞懂Linux时区设置、自定义时区文件
  • Java实例实验项目大全源码企业通讯打印系统计划酒店图书学生管理进销存商城门户网站五子棋
  • 基于nvidia xavier智能车辆自动驾驶域控制器设计与实现-百度Apollo架构(二)
  • 考研408 王道计算机考研 (初试/复试) 网课笔记总结
  • [Java·算法·中等]LeetCode34. 在排序数组中查找元素的第一个和最后一个位置
  • SAP BTEs的简介及实现