【基础】高低位和大小端
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
大小端模式出现是为了兼容不同CPU采用的不同的指令集
PowerPC架构和x86架构采用的是不同的CPU指令集。PowerPC采用精简指令集RISCreduced instruction set computerx86指的是特定微处理器执行的一些计算机语言指令集。
PowerPC 大端模式
x86小端模式
高位字节、低位字节
通常从最高有效位开始自左向右书写一个数字。
在理解有效位这个概念时可以想象一下你的支票数额的第一位增加1和最后一位增加1之间的巨大区别前者肯定会让你喜出望外。
计算机内存中一个字节的位相当于二进制数的位这意味着最低有效位表示1倒数第二个有效位表示2×1或2倒数第三个有效位表示2×2×1或4依此类推。如果用内存中的两个字节表示一个16位的数那么其中的一个字节将存放最低的8位有效位而另一个字节将存放最高的8位有效位见图。
存放最低的8位有效位的字节被称为最低有效位字节或低位字节而存放最高的8位有效位的字节被称为最高有效位字节或高位字节。
个人理解左边是高字节、右边是低字节
大端、小端
大端模式高位字节排放在内存的低地址端低位字节排放在内存的高地址端
小端模式低位字节排放在内存的低地址端高位字节排放在内存的高地址端
简单来说大端—高尾端小端—低尾端
举个例子比如数字 0x12 34 56 78在内存中的表示形式
1)大端模式
低地址 -----------------> 高地址
0x12 | 0x34 | 0x56 | 0x78
2)小端模式
低地址 ------------------> 高地址
0x78 | 0x56 | 0x34 | 0x12
个人理解大端正常小端翻转
3)下面是两个具体例子
16bit宽的数0x1234在Little-endian模式以及Big-endian模式CPU内存中的存放方式假设从地址0x4000开始存放
内存地址 | 小端模式存放内容 | 大端模式存放内容 |
---|---|---|
0x4000 | 0x34 | 0x12 |
0x4001 | 0x12 | 0x34 |
32bit宽的数0x12345678在Little-endian模式以及Big-endian模式CPU内存中的存放方式假设从地址0x4000开始存放
内存地址 | 小端模式存放内容 | 大端模式存放内容 |
---|---|---|
0x4000 | 0x78 | 0x12 |
0x4001 | 0x56 | 0x34 |
0x4002 | 0x34 | 0x56 |
0x4003 | 0x12 | 0x78 |
4)大端小端没有谁优谁劣各自优势便是对方劣势
小端模式
- 强制转换数据不需要调整字节内容1、2、4字节的存储方式一样
强制类型转化如int4字节转化成short2字节直接可以取出前面的低位两字节 - CPU计算是从数据的低位到高位计算效率高
所以当CPU从地址的低位到高位移动的时候正好数据也是从地位到高位变化计算高效
大端模式
- 符号位的判定固定为第一个字节容易判断正负
大端模式中地址的变化顺序低到高与数据的阅读顺序高位到低位如12345678我们会从高位开始读即从左到右相吻合。所以当沿着地址空间找到某个数据内存的时候我们首先就可以根据他的内容的第一个字节来判断正负