当前位置:网站首页>一文让你快速了解大小端概念!
一文让你快速了解大小端概念!
2022-08-10 14:48:00 【一个想打拳的程序员】
0.在介绍大小端之前呢,我们先来看一道题目
首先为什么会输出11223300呢,可能大家会觉得输出的是00223344,那结果究竟为什么不一样呢?
1.这里就要引入一个概念:什么是大小端?
大端字节序存储:把一个数值的低位字节的内容,存放到高地址处,高位字节的内容,存放到低地址处。
小端字节序存储:把一个数值的低位字节的内容,存放到低地址处,高位字节的内容,存放到高地址处。
1.1 按F10进行调试,然后打开内存窗口
1.2 通过&a找到a的地址
很明显从这里看出在VS2019下,采用的是小端存储,数值低位字节的内容的存放在低地址处,数值高位的字节内容存放在高地址处。
2 为什么要有大小端呢?
为什么会有大小端模式之分呢?这是因为在计算机系统中,我们是以字节为单位的,每个地址单元
都对应着一个字节,一个字节为8 bit。但是在C语言中除了8 bit的char之外,还有16 bit的short
型,32 bit的long型(要看具体的编译器),另外,对于位数大于8位的处理器,例如16位或者32
位的处理器,由于寄存器宽度大于一个字节,那么必然存在着一个如何将多个字节安排的问题。因
此就导致了大端存储模式和小端存储模式。
例如:一个 16bit 的 short 型 x ,在内存中的地址为 0x0010 , x 的值为 0x1122 ,那么 0x11 为
高字节, 0x22 为低字节。对于大端模式,就将 0x11 放在低地址中,即 0x0010 中, 0x22 放在高
地址中,即 0x0011 中。小端模式,刚好相反。我们常用的 X86 结构是小端模式,而 KEIL C51 则
为大端模式。很多的ARM,DSP都为小端模式。有些ARM处理器还可以由硬件来选择是大端模式
还是小端模式。
3.一道笔试题(2015年百度系统工程师笔试题)
请简述大端字节序和小端字节序的概念,设计一个小程序来判断当前机器的字节序。
#include <stdio.h>
int check_sys()
{
int i = 1;
return (*(char *)&i);
}
int main()
{
int ret = check_sys();
if(ret == 1)
{
printf("小端\n");
}
else
{
printf("大端\n");
}
return 0;
}
那么为什么这么判断呢,我们接下来做分析!
3.1 看图
我们假设一个变量a=1,然后取出a的地址,将它强制转换成char * ,用char*p来接收,指向低地址处的一个字节,然后我们将解引用,如果返回的是1,则是小端存储,返回0,则是大端存储!
4.结语
大家听懂了吗?喜欢就点个赞呗!
边栏推荐
猜你喜欢
Appium for APP automation testing
Zijin Example
SWIG教程《二》
SWIG教程《一》
Oracle数据库备份dmp文件太大,有什么办法可以在备份的时候拆分成多个dmp吗?
It is reported that the original Meitu executive joined Weilai mobile phone, the top product may exceed 7,000 yuan
JS entry to proficient full version
【语义分割】DeepLab系列
学习MySQL 临时表
QOS function introduction
随机推荐
兆骑科创创业赛事活动发布平台,创业赛事,项目路演
Analysys and the Alliance of Small and Medium Banks jointly released the Hainan Digital Economy Index, so stay tuned!
PCL 最小二乘拟合空间曲线
JS entry to proficient full version
Systemui status bar to add a new icon
PAT甲级 1014 排队等候(队列大模拟+格式化时间)
程序员=加班??——掌握时间才能掌握人生
Websocket realizes real-time change of chart content
JS 从零手写实现一个bind方法
宝塔面板开放Redis给指定外网机器
SWIG教程《四》-go语言的封装
老板加薪!看我做的WPF Loading!!!
波士顿房价预测
mysql进阶(三十三)MySQL数据表添加字段
软件测试用例篇
微信扫码登陆(1)—扫码登录流程讲解、获取授权登陆二维码
解读STEAM教育中的表现性评价
网络工程师的背包(EDC总结推荐)
$‘\r‘: command not found
Flask框架——基于Celery的后台任务