【问题标题】:Bit Mask Question位掩码问题
【发布时间】:2011-06-07 19:36:56
【问题描述】:

阅读销售点系统的文档,这里是他们为面具提供的示例,该面具应该告诉您选择了哪些座位。我想不通。我完全理解位掩码。这个例子是不是错了?

功能

此系统变量是一个包含座椅过滤器掩码的八字符字符串。

类型/尺寸

A8

语法

@Filter_mask

Filter_mask 用法

这个系统变量是只读的。

Filter_mask 示例

以下是过滤器掩码的示例:

80000000 - seat 1 is active (@filter_active ="Y")
00000001 - seat 32 is active (@filter_active = "Y")
50A00000 - seats 2,4,9 and 11 are active (@filter_active = "Y")
00000000 - filter inactive, no seats

【问题讨论】:

  • 这些示例在我看来是正确且一致的 - 您到底遇到了什么困难? MSB 是 1 号座位,LSB 是 32 号座位。
  • 或者我不理解位掩码。您能解释一下 80000000 是如何转换为座位 1 的吗?
  • 一次将每个数字转换为 4 位二进制。

标签: bitmask bit-masks


【解决方案1】:

这些是 8 位十六进制数,最多可以存储 32 位二进制数。

(16^8 = 2^32 = 4,294,967,296)

在二进制表示中,每个数字对应一个座位:

   hex               binary
80000000 = 10000000000000000000000000000000
00000001 = 00000000000000000000000000000001
50a00000 = 01010000101000000000000000000000
00000000 = 00000000000000000000000000000000

第一个二进制位用于座位#1,最后一个二进制位用于座位#32。因为他们给你一个 8 字符的字符串,你可能想把它解析成一个 32 位的值来做掩码算法。在您的目标语言中查找“十六进制字符串到整数”,您会发现如下内容:

Convert hex string to int in Python

注意:当您查看诸如 ("0x50a00000 in binary") 之类的内容时,Google 可以立即为您进行基本转换,但 Wolfram Alpha 可以做的更多:

http://www.wolframalpha.com/examples/NumberBases.html

【讨论】:

    【解决方案2】:

    将每个数字一次转换为 4 位二进制。

    80000000 -> 1000 0000 ....
    50A00000 -> 0101 0000 1010 ...
    

    【讨论】:

      【解决方案3】:

      这个例子似乎是对的。他们只是颠倒了最高有效位和最低有效位,并对位位置使用基于 1 的索引(除了将数据保存为 ASCII 而非 4 个字节的十六进制)。因此,如果设置了位 n(LSB 为位 #0,或值 00000001),您将获得座位号 31-n+1

      【讨论】:

      • 我还是看不出80000000 是怎样的1
      • 我认识一些人非常痴迷于保持数据的可读性。所以(可能)不是每字节 256 个值,编写规范的人选择每字节有 16 个值(0-f),它们可能表示为直接的 ASCII 值。
      【解决方案4】:

      您的面具如下:

      Seat 1: 0x80000000
      Seat 2: 0x40000000
      Seat 3: 0x20000000
      Seat 4: 0x10000000
      Seat 5: 0x08000000
      ...
      Seat 31:0x00000002
      Seat 32:0x00000001
      

      或更笼统地说:

      mask = 1 << (32 - seatno)
      

      例子:

      0x50A00000 = 0x40000000 | 0x10000000 | 0x00800000 | 0x00200000
      

      因此座位 2、4、9 和 11。

      【讨论】:

        猜你喜欢
        • 2023-03-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-28
        • 1970-01-01
        相关资源
        最近更新 更多