Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 等价于C中的'IF(X和(2^Y))Then'#_C#_Vb6_Operators_Translation - Fatal编程技术网

C# 等价于C中的'IF(X和(2^Y))Then'#

C# 等价于C中的'IF(X和(2^Y))Then'#,c#,vb6,operators,translation,C#,Vb6,Operators,Translation,我在VB6中有这个If条件 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代码# 在

我在VB6中有这个
If
条件

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代码#

在上面的代码中,
intNumber
可以是任何数字。

试试看

if ( 1 & ( 2 ^ 1))
  a = a + "1";
else
  a= a+ "0";

不要使用短路和断路器。试试这个:

if (1 & (2 ^ 1) == 1)
{
    a = a + "1";
}
else
{
    a = a + "0";
}

注意:由于原始问题中缺少信息,此答案已被大量编辑。这个版本的答案现在基于更新的问题,并提供了足够的信息。有关历史记录,请检查编辑日志

两件事:

  • &&
    用于布尔表达式之间,以确定逻辑AND值
  • 在C#中,
    ^
    表示异或,而不是提升到的幂。您没有就此提出任何问题,但不可避免地发现,
    ^
    似乎没有发挥作用
&
很容易处理,因为它可以替换为单个的
&
,这具有双重含义,具体取决于上下文。它要么是一个完整的求值逻辑AND运算符(
&&
是一个短路运算符),要么是一个按位运算符,这就是您在这里想要的

不过,
^
是不同的。最直接的等价物是,但在这种情况下,一个更好的替代方法是位移位


2^X
的情况可以被认为是将1位X位置向左移位,向左移位位有自己的运算符,
它看起来像是在使用VB按位进行操作,在这种情况下,可能:

if ( (1 & ( 2 ^ 1)) != 0)
然而,这是一个常数!你确定那里没有变量吗

2^1等于3;1&3等于1;所以这永远是真的


(至少,在C#下,^是XOR;我听说在VB中,^是幂,所以2^1是2;1&2是0;所以这总是错误的…)

我不理解条件语法。。。你是说1&(2^1))?(仅使用一个符号进行位比较!)(但这是常量!)

但是如果a是一个字符串, 然后


你的帖子毫无意义:

IF ( 1 AND ( 2 ^ 1)) Then 
 a = a + " 1" 
Else
  a = a + " 0"
2^1=2=数学功率(2,1) 1和2=1和2=0


这个逻辑意味着if的结果将始终为零。

如果我正确理解了您想要做的是在循环中做

if i is even
a = a + "0"
else
a = a+"1"
在这种情况下,如果你只是写

for (int i=7;i>=0;i--)
{
   bin+=(i % 2).ToString();
}

同样对于循环中的字符串连接,您应该使用StringBuilder类not+运算符。

仅供参考,Lasse最终代码的更简洁版本:

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);
Char[] digits = new Char[8]; // change if you want more/fewer digits
int index = digits.Length;
var x = intNumber;
do {
    digits[--index] = '0' + (x & 1);
    x >>= 1;
} while (index);
bin = new String(digits);

基本上,这利用了这样一个事实,即我们可以很容易地将数字向右移动,就像将遮罩向左移动一样。如果我们这样做,AND运算的结果总是1位数,这与我们希望在字符串中使用的数字相同,因此我们只需通过添加“0”(或48或0x30)将其转换为ASCII字符即可。

您想实现什么?我不懂VB,所以你能详细说明你想做什么吗?我更新了我的答案,以反映你的位数和变量名称。所需的代码位于底部。^在VB中是的幂,而不是XOR;)足够公平——在这种情况下,你自己对价值的分析是正确的-该死的VB!(当然,这对VB意味着什么,我将留给VB的人;-p)Marc,更正了我的回答,说这是我正在解释的VB6代码:)我认为lassevk的最后一句话可能被省略了。我认为SO的精神是帮助人们。在这个过程中没有必要成为斯奈德。@perrynel.myopenid.com-我不会把它归类为斯奈德;他提出了一个公平的观点,那就是人们经常过度剪断他们发布的代码。有时他们会把它剪下来。这是一条很细的线,但当人们发布一些没有帮助的东西时指出这一点是公平的。好吧,不必嘲笑,但我更正了我的答案。我仍然想要他的真实代码,在我看来,成为他的真实代码的可能性很小。现在,如果它是真实的代码,我也发布了真实的答案,这是我最初的一行代码。:)
 a +=  Conditional?  "1": "0";
IF ( 1 AND ( 2 ^ 1)) Then 
 a = a + " 1" 
Else
  a = a + " 0"
if i is even
a = a + "0"
else
a = a+"1"
for (int i=7;i>=0;i--)
{
   bin+=(i % 2).ToString();
}
Char[] digits = new Char[8]; // change if you want more/fewer digits
int index = digits.Length;
var x = intNumber;
do {
    digits[--index] = '0' + (x & 1);
    x >>= 1;
} while (index);
bin = new String(digits);