VB6按位转换为c#的布尔结果

本文关键字:布尔 结果 转换 VB6 | 更新日期: 2023-09-27 18:13:38

如果我在VB6:

GetBit = 414 And 2 ^ 0

GetBit将等于false,因为函数的返回类型是布尔值。我不确定vb6是如何提出虚假的,虽然?

如何将其转换为c#?

long longResult = 0;
longResult = 414 & 2 ^ 0;
return Convert.ToBoolean(longResult);

^上面的c#代码返回true,其中longResult为2。我知道2是如何计算的,但我不确定如何/为什么在vb6代码返回false ?

VB6按位转换为c#的布尔结果

Basic中的^运算符是Math.Pow()。因此在VB6中,它被计算为414 &数学。Pow(2,0) == 0x19E &1 = 0 == False。注意整数字面值的0次幂并不是很有用,结果总是1。

在c#中,^运算符是异或运算符,不是一回事。

更仔细的审查当然是有必要的。这不是那种你想要盲目音译的代码,很有可能你只是重现了一个bug。


真正的代码是:long result = firstParam &数学。战俘(2,secondParam);

。请记住,VB6中的Long是一个32位整数,而c#中的int是一个32位整数。你真的不想用浮点数学。正确的转换是:

  int result = firstParam & (1 << secondParam);

Update:我完全忽略了c#中的^是XOR而不是Pow(),非常尴尬。我决定留下我的答案,因为VB6解决方案仍然是正确的,因为两个链接到具有操作符优先级的页面。

原文:经典运算符优先级问题;-)c#和VB6在这方面有所不同。

在VB6中,位运算符的优先级比算术运算符低,参见Visual Basic中的运算符优先级。结果是2 ^ 0 = 1 414 1 = 0

得到True的解是:

GetBit = (414 And 2) ^ 0

为完整起见,您可以在这里找到c#操作符优先级。事实证明,&