【问题标题】:Bits, bytes and endianness位、字节和字节序
【发布时间】:2012-05-24 08:27:27
【问题描述】:

我一直在读一些关于字节序的东西,它适用于字节而不是位,但最终不是所有的东西都是一组位吗?

现在我还读到,我们指的是字节而不是位,因为计算机是字节可寻址的,并且一次可以获取一个字节的数据,并且字节顺序将指的是最低有效“字节”的位置,同意。

但是,这些位是如何存储在这些单独的字节中的?我的意思是我的最低有效位在哪里不重要吗?我一直对右边的最低有效位感到满意,所以是这样在硬件层面也是这样吗?

如果我想访问字节中的特定位,寻址如何处理位?这是我的问题

为了更清楚,最低地址将用于最高有效“位”或最低有效“位”

【问题讨论】:

    标签: bit


    【解决方案1】:

    访问位通常通过掩码和移位来完成。对于掩码本身,您不需要考虑最高/最低有效位的位置。第 1 位有掩码 1,第 2 位有掩码 2,第 3 位有掩码 4,依此类推。

    如果您希望位 n 位于任意硬件和任意位每字节设置的最低/最高有效位的位置,那么只有一种算法:

    /* set bit N */
    extr <- 2^N
    do
      extr <- rot_right(extr)
    until (extr & 1)
    

    如果最低有效位在内部存储在最左侧,该算法也可以工作,但它需要位循环操作。然后,您可以使用计数器确定 LSB 是最左边还是最右边。

    通常(现在)可以安全地假设,最低有效位是字节中的最右边。

    【讨论】:

    • 这就是我的意思,你怎么知道最低有效位在哪里?或者这“总是”正确
    • 通过使用算法,在每字节 8 位设置中检查位 2,如果向右旋转 1,则 LSB 在最右边,如果向右旋转 7,则 LSB是最左边的。
    • 您也可以使用shift_right 操作并检查寄存器何时变为零,通过计数再次确定在哪里 LSB 在
    • 你告诉我使用函数来检查寄存器的值,好的,但是这些函数正在工作,因为它们知道最低和最高有效位在哪里,所以基本上我想要的是,这些函数是如何工作的知道最低有效位在哪里吗?
    • 我的意思是架构默认为字节序的小端或大端,位的默认立场是什么?
    【解决方案2】:

    令牌环和以太网的 MAC 地址具有不同的位字节序表示。

    令牌环的 MAC 寻址字节 (0x34) = 以太网的 MAC 寻址字节 (0x2C)。字节的地址顺序仍然是大端,但一个字节内的位具有不同的位端。当使用具有两种类型接口的系统进行网络流量时,这会产生兼容性问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-05
      • 1970-01-01
      • 1970-01-01
      • 2013-05-24
      • 2020-01-13
      相关资源
      最近更新 更多