如何在 C# 中使用 return 作为布尔结果的数学表达式执行位逻辑?

How to execute Bit logic with Math expressions in C# that return as a boolean result?

我正在将遗留 VB.NET 代码转换为 C#,并且偶然发现了一个我一生都无法转换为 C# 的逻辑表达式。

下面的 VB.NET 代码段基本上计算每个数学表达式,并根据布尔结果,将数组索引设置为该布尔值。

    Public Function createBigEndianBitArray(ByVal bt() As Byte) As BitArray
    Dim boolAra() As Boolean
    Dim ba As BitArray
    Dim x As Integer, y As Integer
    Dim cur_index As Integer
    ' get the length of the byte array and multiply by 8 for the
    ' length of the boolean array
    ReDim boolAra((bt.Length * 8) - 1)

    cur_index = 0 ' boolean array index

    ' iterate through the byte array
    For x = 0 To bt.Length - 1
        ' iterate through each byte
        For y = 7 To 0 Step -1
            boolAra(cur_index) = bt(x) And 2 ^ y
            cur_index += 1
        Next
    Next

    ba = New BitArray(boolAra)
    Return ba
End Function

在 C# 中,在线翻译器完全被搞砸了,我什至能够编译它的唯一方法是将两个数学表达式包装在 Convert.Boolean() 中。但是,当我比较两者的输出时,它们的结果大不相同,这意味着位逻辑的工作方式不同。

    public BitArray createBigEndianBitArray(byte[] bt)
    {
        bool[] boolAra;
        BitArray ba;
        int x;
        int y;
        int cur_index;
        // get the length of the byte array and multiply by 8 for the
        // length of the boolean array
        boolAra = new bool[(bt.Length * 8)];

        cur_index = 0; // boolean array index

        // iterate through the byte array
        for (x = 0; x <= bt.Length - 1; x++)
        {
            // iterate through each byte
            for (y = 7; y >= 0; y += -1)
            {
                boolAra[cur_index] = Convert.ToBoolean(bt[x]) & Convert.ToBoolean(Math.Pow(2, y));
                cur_index += 1;
            }
        }

        ba = new BitArray(boolAra);
        return ba;
    }

当您在 VB 中将整数分配给布尔值时,它实际上是在测试整数是否等于零,因此 C# 等价物是:

for (y = 7; y >= 0; y--)
{
    boolAra[cur_index] = (bt[x] & (byte)Math.Pow(2, y)) != 0;
    cur_index += 1;
}