注意:由于原始问题中缺乏信息,此答案已被大量编辑。此版本的答案现在基于具有足够信息的更新问题。有关历史记录,请查看编辑日志。
两件事情:
&&
用于布尔表达式之间,以确定逻辑与值
^
在 C# 中表示 XOR,而不是提升到幂。你没有问这个问题,但你不可避免地发现它^
似乎没有做它的工作。
&&
很容易处理,因为它可以替换为具有双重含义的单个,&
具体取决于上下文。它要么是一个完整的逻辑 AND 运算符(&&
是一个短路的运算符),要么是一个位运算符,这就是你想要的。
^
不过是不同的。最直接的等价物是Math.Pow,但在这种情况下,可以使用更好的替代方案,即位移。
的情况2^X
可以认为是将 1 位 X 位置左移,而左移位有其自己的运算符,<<
运算符。
所以2^X
可以换成1 << X
.
在这种情况下,这就是你想要的最里面的 if 语句:
if ((intNumber & (1 << index)) != 0)
a = a + "1";
else
a = a + "0";
像你在底部示例中那样将它插入一个循环中,你会得到这个:
for (Int32 index = 7; index >= 0; index--)
if ((intNumber & (1 << index)) != 0)
bin = bin + "1";
else
bin = bin + "0";
现在,像这样连接字符串会产生 GC 压力,因此您可能应该将这些数字存储到Char
数组中,然后再构造字符串,或者使用 StringBuilder 类。否则,您将构建 8 个(来自我的示例)不同大小的字符串,并且您只会使用并保留最后一个。根据具体情况,这可能不会造成问题,但如果您多次调用此代码,它会加起来。
这是最终代码的更好版本:
Char[] digits = new Char[8]; // change if you want more/fewer digits
for (Int32 index = 0; index < digits.Length; index++)
if ((intNumber & (1 << index)) != 0)
digits[digits.Length - 1 - index] = '1';
else
digits[digits.Length - 1 - index] = '0';
bin = new String(digits);
然而,这是踢球者。在 .NET 中已经有一种方法可以将 Int32 值转换为充满二进制数字的字符串,这就是 Convert.ToString 方法。唯一的区别是它不添加任何前导零,所以我们必须自己做。
因此,这是您应该使用的最终代码:
String bin = Convert.ToString(intNumber, 2).PadLeft(8, '0');
这将替换整个循环。