【问题标题】:Bit representation of a C vectorC 向量的位表示
【发布时间】:2016-08-30 10:41:20
【问题描述】:

在 little endian 中工作,这很奇怪(包括 eof,如果有的话)像这样的 C 向量的位表示?

unsigned char vet[] = {0x0f, 0x05};

【问题讨论】:

    标签: c vector bit endianness


    【解决方案1】:

    unsigned chars 向量的位表示不依赖于字节序,因为char 类型是单字节的,而字节序告诉您多个字节在内存中的排列方式。

    因此,0x0f 将在内存中比0x05 更早的地址找到,从而产生

    0000111100000101
    

    如果有 [one] 则包括 eof

    与 C 字符串和用 C 字符串初始化的数组不同,用花括号初始化器初始化的数组没有结束标记。

    【讨论】:

    • 好的,所以我认为每两个十六进制数我都有 8 位,不管它们是什么,对吗?那么为什么我有这个练习是这个向量的长度是由教授给出的 18 位而不是 24 位?无符号字符 vet[] = { 0xBC,0xFF,0x01 };
    • @caramelleamare 除了将每个字符设为 6 位之外,我不知道如何计算三个字节中的 18 位。我肯定会问教授剩下的六位在哪里。
    • @caramelleamare 最小值为 1,最大值为 7,无论您如何订购矢量(从前到后或从后到前)。
    • @caramelleamare 我说的是你的另一个例子,BC,FF,010x01 的表示中有七个连续的零。
    • @caramelleamare Hex 01 是二进制 00000001,所以中间是零,不能去掉。
    【解决方案2】:

    那么,如果向量是:

    unsigned char vet[] = { 0xBC,0xFF,0x01 }
    

    位表示应该是:

    101111001111111100000001
    

    而且它的长度是 24 位,因为没有结束标记,对吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-29
      • 1970-01-01
      相关资源
      最近更新 更多