C语言重难点:大端小端
文章目录
- 一:大端和小端
- 二:经典问题
我们知道,一个整形数据在内存中是连续排列的,它会占用内存连续的多个字节的空间,比如int a=-10
,就会占用四个字节的空间
int a=-10;
原码:1000 0000 0000 0000 0000 0000 0000 1010
反码:1111 1111 1111 1111 1111 1111 1111 0101
补码:1111 1111 1111 1111 1111 1111 1111 0110
因此对于-10,它对应的进制为0xfffffff6
,既然整形占用4个字节,因此二进制的每8位(16进制每2位)分别存放内存中的一个字节中,也即ff
,ff
,ff
,f6
(左侧为数据高位,右侧为数据低位)
运行程序后,查看内存状态,该变量在内存中状态为
因此这四部分是按照“数据低位存放在内存低地址,数据高位存放在内存高地址”来分布的
那么是否可以按照“数据低位存放在内存高地址,数据高位存放在内存低地址”来分布呢?答案是可以的,他们分别对应小端存储和大端存储
至于为什么有这样的问题,其实这是数据存储的问题,因为早期硬件厂商很多,每个人都有自己的标准,都认为自己的标准是最合理的,所以产生了很多分歧,就像吃香蕉一样,从头剥皮和从尾剥皮都是没有问题的。当然这种分歧并不严重,只要约定好存取的规则,怎么存就怎么取,那么数据依然是正确无误的
一:大端和小端
大端(存储)模式(小小小),是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地中
小端(存储)模式(大大大),是指数据的低位保存在内存的低地址中,而数据的高位,,保存在内存的高地址中
二:经典问题
1:如何判断当前机器的字节序
2:下面的程序输出的是什么(64位操作系统)
#include <stdio.h>struct task
{uint16_t id;//2个字节uint32_t value;//4个字节uint64_t timestamp;//8个字节};int main()
{struct task tas = {};uint64_t a = 0x00010001;memcpy(&tas, &a, sizeof(uint64_t));printf("%11u,%11u,%11u", tas.id, tas.value, tas.timestamp);}
根据内存对齐的原则,id,value和timestamp所组成的结构体为16个字节
接着对结构体进行初始化,全部为0
变量a的存储布局
memcpy函数用法如下
也就是从a的位置开始,向后复制16个字节
故结果为1 0 0
C语言重难点:大端小端相关推荐
- c语言 union及 大端小端
union 关键字的用法与struct 的用法非常类似. union 维护足够的空间来置放多个数据成员中的"一种",而不是为每一个数据成员配置空间,在union 中所有的数据成员共 ...
- C语言中低位存放,C语言 大端小端存储解析以及判断方法
当我们在C语言中查看数据在内存中的存储时,我们经常会发现一个很奇怪的现象,什么现象呢? 例如下面这段代码 int main() { int i = 1; return 0; } 数据在内存中的存放方式 ...
- C语言程序设计 | 大端小端存储解析以及判断方法
当我们在C语言中查看数据在内存中的存储时,我们经常会发现一个很奇怪的现象,什么现象呢? 例如下面这段代码 int main() {int i = 1;return 0; } 数据在内存中的存放方式似乎 ...
- 字符编码方式及大端小端
参考资料: http://www.cnblogs.com/zhouyuqin/p/4688459.html http://pcedu.pconline.com.cn/empolder/gj/other ...
- 栈增长方向与大端/小端问题
转:http://www.cnblogs.com/xkfz007/archive/2012/06/22/2558935.html 栈增长和大端/小端问题是和CPU相关的两个问题. 在内存管理中,与栈对 ...
- 大端小端模式(俗称大尾小尾模式)
转自百度百科 http://baike.baidu.com/link?url=uKVPtSaiXzEAXJSHfiya1Wj_oITw-t8MpHkJxJvMb0Eu_WXo28czAHLY-FOqj ...
- Unicode编码与大端小端
大端小端区别: 举例: 一个4字节的整型数据 0x12345678 高字节是0x12, 低字节是0x78,这个不用多说吧 存储地址假设为0x00000000 0x00000001 0x00000002 ...
- socket 大端 小端 转换 (转)《二》
http://blog.csdn.net/kukumouse/article/details/2270356 (1)对于位域结构中的变量来说,其长度不能跨越字节,也就是说不能超过8位.当然如果设置空白 ...
- C/C++之大端小端
如果有一个变量 unsigned int a=0x12345678; 大端Big-Endian:高字节在前 12 34 56 78 小端Little-Endian:低字节在前 78 56 34 12 ...
- 彻底弄懂计算机中的大端小端
大端与小端这个问题在做和其他设备交换原始字节数据的时候是非常重要的概念,也是必须要掌握的内容,但是很多人就是仅仅是稍微有些了解,但每次真正去做东西的时候,还是要花半天去想,博主就是这样的人,出现这样问 ...
最新文章
- hbase 数据的导入导出
- HDU - 5692 Snacks(dfs序+线段树)
- 关于质量的联想:消费示范效应
- java开发计算机考试服务器_2011计算机二级JAVA编程:取得服务器当前的各种具体时间...
- Nodejs入门[在互联网上非常经常,非常疯狂的一个转载]
- C# via CLR之IL中间语言初步探索
- STC学习:“FM收音机”原理与测试说明
- Mac下开发ASP.NET Core应用,我用FineUICore!
- 大一计算机word排版试题,Word排版练习题
- dataframe筛选列名_python 查看列名_Pandas 库之 DataFrame - Python学习笔记
- 查找——图文翔解RadixTree(基数树)
- 使用python创建学员管理系统
- Turtle 画方形 画圆 画三角形
- Apache Druid历险记
- 研发效能度量指标及其如何度量
- 转:网络模拟利器NEWT的前世今生
- 智能优化与机器学习结合算法实现时序数据预测matlab代码清单
- USB HOST与 USB OTG的区别及工作原理
- 治头发稀少哪个方法好 六个有效的生发方法
- OpenFOAM 中边界条件的设定【转载】
热门文章
- 计算机控制实时的概念,计算机控制系统复习资料..doc
- 8个球放入3个盒子方式_球放进盒子问题(8种, 可变形)
- html 控制文字的标签,html里面有一个控制文字滚动的标签marquee,比较有用。
- OpenCV中Canny边缘检测
- 科室鄙视链最低端,居然是这类人
- 伸展树(Splay tree)图解与实现
- 啊哈C语言,c语言编程入门书籍及PPT(PDF版)下载网址
- 微信开发h5支付功能,配置单价和商品信息无法更新问题解决方法!
- 怎么用python进行回归预测_使用Python训练回归模型并进行预测
- 自动控制原理第二版王建辉_气箱脉冲布袋除尘器的工作原理