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

网站建设自主开发的三种方式商城网站开发 价格

网站建设自主开发的三种方式,商城网站开发 价格,连连跨境电商网站怎么做,高端建站公司源码目录 1. 大小端字节序 1.1 什么是大小端字节序? 1.2 为什么有大小端字节序? 1.3 习题:用程序结果判断大端小端 2. 各种易混淆的高低地址顺序 2.1 监视窗口的地址表示【计算机标准展示方式】 2.2 横向地址表示 2.3 一个字节 与 多个字节 的地址…

目录

1. 大小端字节序

1.1 什么是大小端字节序?

1.2 为什么有大小端字节序? 

1.3 习题:用程序结果判断大端小端

2. 各种易混淆的高低地址顺序

2.1 监视窗口的地址表示【计算机标准展示方式】

2.2 横向地址表示

2.3 一个字节 与 多个字节 的地址顺序区别

2.4 内存空间的开辟顺序

3. 判断练习

1. 大小端字节序

1.1 什么是大小端字节序?

其实超过⼀个字节的数据在内存中存储的时候,就有存储顺序的问题。按照不同的存储顺序,我们分为大端字节序存储和小端字节序存储,下面是具体的概念:

  • 大小端描述的对象是低位字节
  • ⼤端(存储)模式:是指数据的低位字节内容保存在内存的高地址处,⽽数据的高位字节内容,保存在内存的低地址处(低位数——高地址)
  • 小端(存储)模式:是指数据的低位字节内容保存在内存的低地址处,⽽数据的⾼位字节内容,保存在内存的⾼地址处(低位数——低地址)

 假设现在有一个int型大小的16进制数0x11223344,它在小端序和大端序是下面这样的:    

Visual Studio 2022采用的是小端字节序存储。

代码演示:

int main()
{int a = 0x11223344; return 0;
}

1.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处理器还可以由硬件来选择是 ⼤端模式还是⼩端模式。

1.3 习题:用程序结果判断大端小端

请简述⼤端字节序和⼩端字节序的概念,设计⼀个小程序来判断当前机器的字节序。--- 百度笔试题

分析:

  1. 假如我们有一个int型的十进制数1,如果是小端字节序,它的16进制排列是01 00 00 00;如果是大端字节序,它的16进制排列是00 00 00 01。
  2. 指针接收变量的地址是该变量最低地址
  3. 指针的类型决定指针访问的步长

知道了这几个知识,我们就可以写成这个程序:

int check_sys()
{int i = 1;return (*(char*)&i);
}int main()
{int ret = check_sys();if (ret == 1)printf("小端\n");elseprintf("大端\n");return 0;
}

在VS下输出是小端:

char*指针只能访问一个字节,如果是小端字节序,读到的是数据01,即十进制的1;如果是大端字节序,读到的数据是00,即十进制的0。

2. 各种易混淆的高低地址顺序

2.1 监视窗口的地址表示【计算机标准展示方式】

监视窗口的数据都是16进制的数字,常用“列4”的表示方式。

监视窗口的地址顺序:

(1)横轴:从左往右看,地址变低(左低右高)

(2)纵轴:从上往下看,地址变高(上低下高)

代码演示:(十进制的5 等于 十六进制的00 00 00 05)

int main()
{int a = 5;return 0;
}

列为4时的监视窗口展示顺序:(int是4个字节,所以“列4”是最常用的展示方式)

列为1时的监视窗口展示顺序:

图示:

2.2 横向地址表示

因为监视窗口的标准展示顺序既有横向的地址变化,又有竖向的地址变化,太过复杂。

为了方便自己的理解,我们常采用横向的地址顺序

(横向地址顺序不是第一次出现了,在我们学习数组的时候就已经接触过,只是当时用的数据是十进制的数据,没有大小端字节序的概念)

比如刚刚的int a=5,用横向的地址表示是下面这样:

图示:

2.3 一个字节 与 多个字节 的地址顺序区别

一个字节中,无地址顺序【无高低地址之分的数字位数顺序】

  • 数学上没有高低地址的说法,只是在物理的内存结构中有高低地址之分。
  • 而最小的内存单元的大小是一个字节,对于一个最小单元来说,本质是8个二进制数字显示的是2个16进制数字
  • 而一个数字是不会分高低地址的,只有高位数与低位数之分(即数字位数顺序)。
  • 数字位数顺序是固定的,从左向右 位序依次降低。比如十进制:从左往右,千位->百位->十位->个位……

多个字节中,有地址顺序,而且在VS2022中采用的是小端字节序的地址排序

  • 低位字节在低地址。
  • 低位的2个16进制数,放在低地址。

例如,我们有1个int型的数据:int a = 0x12345678(十六进制数)

它的内存图示是如下:

监视窗口也是这样:

2.4 内存空间的开辟顺序

对于前后创建的多个变量或数组

在debug,x86环境下:

栈区内存的使⽤习惯是从⾼地址向低地址使⽤的。【按代码顺序,先在高地址创建变量(或数组),再向低地址创建变量(或数组)】

在release环境 或 x64环境下:

栈区内存的使⽤习惯是从低地址向高地址使⽤的。【按代码顺序,先在低地址创建变量(或数组),再向高地址创建变量(或数组)】

具体的例子可以看我这篇博客:https://blog.csdn.net/2301_80030290/article/details/141333314?spm=1001.2014.3001.5502#t16

对于创建的同一个数组

  • arr[0]是最低的地址(首地址),元素越靠后地址越高

3. 判断练习

请判断下面的代码运行后的结果:(环境:VS2022 ,debug, X86)

int main()				//大小端的
{int arr[4] = { 1, 2, 3, 4 };int* ptr1 = (int*)(&arr + 1);int* ptr2 = (int*)((int)arr + 1);printf("%x\n%x", ptr1[-1], *ptr2);return 0;
}

运行结果:

画图解析

指针ptr1和ptr2都是整型指针,每次可访问4个字节。

这里ptr1[-1]访问的4个字节是:04 00 00 00。按小端字节序读取后的结果是16进制的0x00000004,也就是4。 

这里ptr2访问的4个字节是:00 00 00 02。按小端字节序读取后的结果是16进制的0x02000000,也就是2000000


本期分享完毕,感谢大家的支持~Thanks♪(・ω・)ノ

http://www.yayakq.cn/news/480180/

相关文章:

  • 建设网站视频教程陇南比亚网站建设
  • 网站建设无形资产的账务处理o2o手机网站建设难
  • 广东建设协会网站珠海网站建设 旭洁科技
  • 网站内页做排名官方网站建设与维护好处
  • 网站蜘蛛记录中英文外贸网站建设
  • 说明设计网站开发方案流程免费餐饮管理系统
  • 常用的广州网站建设牌具做网站
  • 门户网站开发公司成都网络运营推广
  • 网站套用模板网站结构有哪几种
  • 北京网站建设团队网页设计包括哪些
  • 网站关键词设置代码彩票网站平台
  • 网站建设支付陕西专业网站建设
  • 男装网站的网站建设背景wordpress 动态标签云
  • 学生网站设计网站 栏目 英语
  • 珠海工商年检到哪个网站做手机网站是怎么制作的
  • 徐州网站简介网站建设如何设计数据库
  • 福安市教育局建设网站seo公司推荐推广平台
  • 新1站网站建设静态网站数据库
  • 如何制作局域网站网站页面相似度查询工具
  • 建设企业网站就等于开展网络营销请公司做网站没有做好可以退钱吗
  • 怎么提升网站的流量许嵩做的网站
  • 以个人名义可以做网站吗cms管理手机网站模板
  • 网站风格优势wordpress xiu5.3
  • 做网站的app有什么作用40平米办公室设计布局
  • 郑州做网站九零后网络海沧抖音搜索seo推广运营
  • 个人网站可以做百度推广吗百度指数1000搜索量有多少
  • 网站后台上传文章怎么做深圳市广告设计公司
  • iis应用程序池与网站做网站找谁好
  • 巢湖建设网站怎样查网站备案
  • h5语言网站制作自建网站视频教程