我试图翻转无符号32位整数的位并输出结果整数。以下是我的代码。
int numberOfTries = Convert.ToInt32(Console.ReadLine());
for (int i = 0; i < numberOfTries; i++)
{
uint input = Convert.ToUInt32(Console.ReadLine());
byte[] bInput = BitConverter.GetBytes(input);
if (BitConverter.IsLittleEndian)
Array.Reverse(bInput);
byte[] result = bInput;
BitArray b = new BitArray(new byte[] { result });
b.Not();
uint res = 0;
for (int i2 = 0; i2 != 32; i2++)
{
if (b[i2])
{
res |= (uint)(1 << i2);
}
}
Console.WriteLine(res);
}
然而,编译器抱怨“不能在我声明BitArray b的行上隐式地将类型'byte []'转换为'byte'”。我已将其声明为byte [],并且不知道为什么会抛出此错误。
答案 0 :(得分:4)
result
已经是byte[]
,所以请改为:
BitArray b = new BitArray(result);
实际导致问题的部分是:
new byte[] { result }
原因是因为数组初始值设定项需要采用与数组元素类型兼容的表达式(此处为byte
)。来自12.6 Array Initializers:
对于一维数组,数组初始值设定项必须由一系列表达式组成,这些表达式与数组的元素类型兼容。