【问题标题】:Set last 4 bits to 0将最后 4 位设置为 0
【发布时间】:2019-12-22 11:45:18
【问题描述】:

我想将我的字节列表的最后 4 位设置为 0。我试过这行代码,但它不起作用:

我的数据 = 1111.1111 myData 应该是 = 1111.0000

(myData & 0x0F) >> 4

【问题讨论】:

  • .net 中有一个 BitArray 类,可能会有所帮助。 docs.microsoft.com/en-us/dotnet/api/…
  • 您不清楚“字节列表”或您对结果的处理方式。而11111111 是一个糟糕的测试模式。
  • myData的类型是什么? byte? long? int?

标签: c# .net bit-manipulation


【解决方案1】:

保留 4 个高位并将 4 个低位归零

myData & 0xF0

【讨论】:

    【解决方案2】:

    假设您的意思是“最后 4 位”是 4 个最低有效位,我为您准备了以下代码示例:

    var myData = 0xFF;
    var result = myData & ~0xF;
    

    因此,基本上,您在这里想要的不是将 4 个最低有效位设置为 0,而是保留其余数据。为此,您必须准备与标准匹配的“直通”掩码,这是不需要的位掩码的反码,即0xF 的反码(另请注意,0xF =(2 次幂) 4) - 1 -- 其中 4 是所需清除的 LSB 的数量)。因此,~0xF 是所需的掩码——您只需将其应用于号码——myData & ~0xF

    注意一个人的补码方法优于 magical numbers,您自己预先计算(例如上面的答案中的 0xF),因为编译器将为您使用此方法的类型生成有效数量的 MSB(最高有效位) .

    更安全的方法是计算变量本身的反码,给出如下所述的有效代码:

    var myData = 0xFF;
    var result = ~(~myData | 0xF);
    

    就是这样!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-28
      • 1970-01-01
      • 1970-01-01
      • 2015-05-09
      • 1970-01-01
      • 2023-01-04
      • 2014-06-05
      • 2020-12-10
      相关资源
      最近更新 更多