C# 等价于C中的'IF(X和(2^Y))Then'#
我在VB6中有这个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代码# 在
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);