当前位置:  开发笔记 > 编程语言 > 正文

在C#中相当于`IF(X AND(2 ^ Y))Then`

如何解决《在C#中相当于`IF(XAND(2^Y))Then`》经验,为你挑选了1个好方法。

If在VB6中有这个条件

If ( X AND ( 2 ^ Y)) Then 
  a = a + " 1" 
Else
  a = a + " 0" 

我想在C#中使用相同的等价物

我尝试过这样做

if ( X && ( 2 ^ Y))   // ERROR: && can not be used between int to int
  a = a + "1";
else
  a = a + "0";

但这件事给我一个错误.

这是我想要转换成C#的完整VB代码

For i = 7 To 0 Step -1
        If intNumber And (2 ^ i) Then   ' Use the logical "AND" operator.
            bin = bin + "1"
        Else
            bin = bin + "0"
        End If
    Next

在上面的代码intNumber可以是任何数字.



1> angry person..:

注意:由于原始问题中缺少信息,因此对此答案进行了大量编辑.此版本的答案现在基于更新的问题和足够的信息.对于历史记录,请检查编辑日志.

两件事情:

&& 在布尔表达式之间使用,以确定逻辑AND值

^在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);

然而,这是踢球者.已经有一种方法可以将Int32值转换为.NET中充满二进制数字的字符串,它是Convert.ToString方法.唯一的区别是它不会添加任何前导零,所以我们必须自己做.

所以,这是你应该使用的最终代码:

String bin = Convert.ToString(intNumber, 2).PadLeft(8, '0');

这取代了整个循环.

推荐阅读
360691894_8a5c48
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有