上海网站建设 排名,seo搜索引擎优化薪资水平,个人 网站备案,做电焊加工的网站目录
一、什么是大小端
二、 举个例子
三、大小端演示
四、解释二中举例的问题
五、怎么判断是大端还是小端
六、一个题目 一、什么是大小端
大端模式#xff08;大端字节序存储#xff09;#xff1a;就是高位字节数据存放在内存的低地址端#xff…目录
一、什么是大小端
二、 举个例子
三、大小端演示
四、解释二中举例的问题
五、怎么判断是大端还是小端
六、一个题目 一、什么是大小端
大端模式大端字节序存储就是高位字节数据存放在内存的低地址端低位字节数据存放在内存的高地址端。 小端模式小端字节序存储就是低位字节数据存放在内存的低地址端高位字节数据存放在内存的高地址端。
【大端】和【小端】表示多字节值的哪一端存储在该值的起始地址处
二、 举个例子
#includestdio.hint main()
{int a 1;return 0;
} 调试运行一下打开内存监视窗口发现定义的这个int类型的变量a(int a 1为4个字节转换成bit是32位所以电脑中存储的变量a为二进制表示00000000 00000000 00000000 00000001vs2019中的监视此时表示的16进制也就是0x00 00 00 01。但是看看VS2019里面所显示的是不是就有点懵了a这个变量值是1 在内存中存储应该是0x 00 00 00 01为什么编译器给出的却是0x 01 00 00 00呢提到这个问题就要说说大小端问题了
三、大小端演示
按照不同模式将a保存在内存中情况如下 补充结合高位字节低位字节与大小端进行比较理解 当向内存中存放一个数据的时候会从内存的高地址开始往低地址的方向放这个数据但是放数据的时候就是按照我们人为的这种认识往里面存放吗比如向内存中放一个数据0x11 22 33 44计算机就是把这个数字送到内存后这个时候内存中数据放的样式就是我们输入的这样吗其实真正向内存存储的时候由于内存选择了不同的两种大端、小端存储模式内部真正存放的样式就跟我们想的不一样了。但是人们聪明啊把自己认为的这种顺序规定了是从高位字节到低位字节的。即一个确定的数字从左往右就是从高位字节到低位字节可以说这是一种一致认为的习惯说法。 这样区分大小端就是按照字节位与地址大小比较来确定。 四、解释二中举例的问题
那么刚刚VS2019中的问题就可以讲的通了在VS2019中数据往内存中存放是由高地址到低地址的由于存储方式是小端存储模式所以先往里放高位字节的内容即对于0x12345678来说从高地址往低地址存放时放入顺序就如图a所示。然后由于操作系统在访问内存数据时是从低地址向高地址的顺序进行的所以最后显示的存放就如图b所示 五、怎么判断是大端还是小端
int check_sys()
{int a 1;return *(char*)a;
}
int main()
{int ret check_sys();if( ret 1 )printf(小端\n);elseprintf(大端\n);return 0;
}六、一个题目 在小端机器中下面代码输出的结果是 A.00223344
B.0
C.11223300
D.112233 #include stdio.h
int main()
{int a 0x11223344;char *pc (char*)a;*pc 0;printf(%x\n, a);return 0;
}解析
假设a变量的地址为0x64则a变量在内存中的模型为 0x64| 44 | 0x65| 33 | 0x66| 22 | 0x67| 11 | char*类型的指针变量pc指向只能指向字符类型的空间如果是非char类型的空间必须要将该空间的地址强转为char*类型。 char *pc (char*)a; pc实际指向的是整形变量a的空间即pc的内容为0x64即44 *pc0即将44位置中内容改为0修改完成之后a中内容为0x11223300 因此选择C
今天的分享就到这啦 如果我的文章对您有帮助
请 “点赞” “收藏” “关注” 一键三连哦
想了解更多知识请前往故里♡927的博客
如果以上内容有什么问题欢迎留言大家一起学习共同进步。 我们下期见~~