高位和低位

高位和低位

Posted by 叉叉敌 on June 16, 2022

学习过程中的总结,有什么不对的地方望指出,谢谢~

为什么会有高位和低位

比如:一个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

github博客

微信公众号:cdtfug, 欢迎关注一起吹牛逼,也可以加微信号「xiaorik」朋友圈围观。