学习过程中的总结,有什么不对的地方望指出,谢谢~
为什么会有高位和低位
比如:一个1位数,一个数字占一位,1位数就占1位,2位数就占2位;那么个1位数相加,6+7=13, 结果就是一个2位数,就需要2个位来存储,(大端模式下)高于1位的就是高,剩余的就是低位, 这里的1是高位,3是低位. 这里的位不是bit的意思.
- Little-Endian就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。
- Big-Endian就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。
小段模式:1是低位,3是高位
低位在前高位在后
一般情况(除了相机.dvd等),计算机中存储的基本单位是字节,一字节为8个bit,一个存储单元只能存储八位字节,比如‘两个8位二进制无符号数相加,其和可能超过8位’。存储这个超过8位的‘和’就不能用一个存储单元了,需要两个,有两个就有前后之分了,把‘和’的高于8位的高低位分开存储,低位在前高位在后就是这个意思。
是什么高位,什么是低位
用内存中的两个字节表示一个16位的数,那么其中的一个字节将存放最低的8位有效位,而另一个字节将存放最高的8位有效位,见图。
存放最低
的8位有效位的字节被称为最低有效位字节或低位字节
,而存放最高
的8位有效位的字节被称为最高有效位字节或高位字节
。
一个16位的数占两个字节的存储空间,即高位字节和低位字节(见上图)。如果是在纸上书写一个16位的数,你总是会把高位字节写在前面,而把低位字节写在后面。然而,当这个数被存储到内存中时,并没有固定的存储顺序。
如果用H和L分别表示高位字节和低位字节,那么可以有两种方式把这两个字节存储到内存中,即H在前L在后或者L在前H在后。把H存储在前的顺序被称为“正向(forward)”或“高位优先顺序;把L存储在前的顺序被称为“逆向”或“低位优先”顺序。
大多数计算机按正向顺序存储一个数,Intel CPU按逆向顺序存储一个数,因此,如果试图将基于Intel CPU的计算机连到其它类型的计算机上,就可能会引起混乱。
举个例子
1) Little-Endian就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。 2) Big-Endian就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。 举一个例子,比如数字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
Read more
https://gist.github.com/4u1kto/44b9fed92f9b3aed5e6d
https://www.cnblogs.com/cuijl/p/8005741.html
微信公众号:cdtfug, 欢迎关注一起吹牛逼,也可以加微信号「xiaorik」朋友圈围观。