【问题标题】:BitArray to integer issueBitArray 到整数问题
【发布时间】:2012-03-30 15:44:45
【问题描述】:
public static int getIntegerFromBitArray(BitArray bitArray)
{
  var result = new int[1];
  bitArray.CopyTo(result, 0);
  return result[0];
}

// Input  A) 01110
// Output A) 14
// Input  B) 0011
// Output B) 12 <=== ????? WHY!!! :)

谁能解释一下为什么我的第二个返回值是 12 而不是 3?请...谢谢。

【问题讨论】:

  • 请告诉我们您是如何使用此方法的,输入 A 和 b 是如何构建的。

标签: c# bitarray


【解决方案1】:

您需要将位旋转到正确的方向才能获得正确的结果。 1100 是 12

【讨论】:

  • 不,这里不需要旋转——它是反射。例如,如果 OP 的输入是 1101,则结果将是 11 (8 + 2 + 1),而您无法通过旋转 1101 的位模式来得到结果...
  • 是的,你是对的。我的意思是旋转 180 ;)。反射在这里是最合适的。如果 1101 旋转 180 我们得到 1011. 11 ^10 = 1011 ^2
  • 不清楚你是否轻率,但在 case 你不是,“旋转 180”通常意味着“旋转 180 位” - 我从不将“旋转”一词用于“反射”。
  • 反射在这里最合适。
【解决方案2】:

基本上,它以与您期望的方式相反的顺序考虑位 - 您尚未显示如何将输入二进制文件映射到 BitArray,但结果是将其视为 1100 而不是 0011。

诚然,文档并不清楚,但它确实以 期望的方式工作:bitArray[0] 代表 最不重要的价值,就像通常是在讨论二进制时(所以第 0 位是 0/1,第 1 位是 0/2,第 2 位是 0/4,第 3 位是 0/8 等等)。例如:

using System;
using System.Collections;

class Program
{
    static void Main(string[] args)
    {
        BitArray bits = new BitArray(8);
        bits[0] = false;
        bits[1] = true;

        int[] array = new int[1];
        bits.CopyTo(array, 0);
        Console.WriteLine(array[0]); // Prints 2
    }
}

【讨论】:

  • 第一个输入(01110)是对称的,所以他没有注意到... +1
  • 一旦你尝试实现像 CopyTo 这样的函数,这个顺序实际上是非常合理的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-29
  • 2013-12-26
  • 2016-01-24
  • 2017-07-16
  • 2018-08-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多