如何在 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;
}
我正在将遗留 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;
}