VB6按位并转换为c#作为布尔结果
如果我在VB6中有:VB6按位并转换为c#作为布尔结果,c#,vb6,bit,C#,Vb6,Bit,如果我在VB6中有: GetBit = 414 And 2 ^ 0 GetBit将等于false,因为函数的返回类型为boolean。我不确定vb6是如何产生false的 如何将其转换为c# ^上面的c#代码返回true,其中longResult为2。我确实理解2是如何计算的,但我不确定vb6代码中如何/为什么返回false?更新:我完全忽略了C中的^是XOR而不是Pow(),非常尴尬。我决定留下我的答案,因为VB6解决方案仍然是正确的,并且因为有两个链接指向具有操作员先例的页面 原始帖子:经
GetBit = 414 And 2 ^ 0
GetBit将等于false,因为函数的返回类型为boolean。我不确定vb6是如何产生false的
如何将其转换为c#
^上面的c#代码返回true,其中longResult为2。我确实理解2是如何计算的,但我不确定vb6代码中如何/为什么返回false?更新:我完全忽略了C中的^是XOR而不是Pow(),非常尴尬。我决定留下我的答案,因为VB6解决方案仍然是正确的,并且因为有两个链接指向具有操作员先例的页面 原始帖子:经典运算符优先级问题;-)C#和VB6在这方面有所不同 在VB6中,位运算符的首选项低于算术运算符,请参见。结果是2^0的值为1,414和1的值为0 实现的解决方案是:
GetBit = (414 And 2) ^ 0
为了完整起见,您可以找到C#运算符的先例。事实证明,&只比^在C#中高一步。更新:我完全忽略了^在C#中是XOR而不是Pow(),非常尴尬。我决定留下我的答案,因为VB6解决方案仍然是正确的,并且因为有两个链接指向具有操作员先例的页面 原始帖子:经典运算符优先级问题;-)C#和VB6在这方面有所不同 在VB6中,位运算符的首选项低于算术运算符,请参见。结果是2^0的值为1,414和1的值为0 实现的解决方案是:
GetBit = (414 And 2) ^ 0
为了完整起见,您可以找到C#运算符的先例。事实证明,&只比^在C#中高一步。更新:我完全忽略了^在C#中是XOR而不是Pow(),非常尴尬。我决定留下我的答案,因为VB6解决方案仍然是正确的,并且因为有两个链接指向具有操作员先例的页面 原始帖子:经典运算符优先级问题;-)C#和VB6在这方面有所不同 在VB6中,位运算符的首选项低于算术运算符,请参见。结果是2^0的值为1,414和1的值为0 实现的解决方案是:
GetBit = (414 And 2) ^ 0
为了完整起见,您可以找到C#运算符的先例。事实证明,&只比^在C#中高一步。更新:我完全忽略了^在C#中是XOR而不是Pow(),非常尴尬。我决定留下我的答案,因为VB6解决方案仍然是正确的,并且因为有两个链接指向具有操作员先例的页面 原始帖子:经典运算符优先级问题;-)C#和VB6在这方面有所不同 在VB6中,位运算符的首选项低于算术运算符,请参见。结果是2^0的值为1,414和1的值为0 实现的解决方案是:
GetBit = (414 And 2) ^ 0
为了完整起见,您可以找到C#运算符的先例。事实证明,&只比C#中的^高一步。Basic中的^运算符是Math.Pow()。因此在VB6中,它的计算结果为414&Math.Pow(2,0)==0x19E&1=0==False。请注意,将整型文字提高到0的幂并不是很有用,结果总是1 在C#中,^运算符是异或运算符,而不是同一事物。只需使用1 更仔细的审查当然是必要的。这不是那种你想盲目音译的代码,很可能你只是在复制一个bug
所以真正的代码是:long result=firstParam&Math.Pow(2,secondParam) 不可以。请记住,VB6中的
Long
是一个32位整数,您需要C#中的int
。你真的不想使用浮点数学。适当的转换是:
int result = firstParam & (1 << secondParam);
int result=firstParam&(1Basic中的^运算符是Math.Pow()。因此在VB6中,它的计算结果为414&Math.Pow(2,0)==0x19E&1=0==False。请注意,将整数文本提高到0的幂次不是很有用,结果总是1
在C#中,^运算符是异或运算符,而不是相同的东西。只需使用1
更仔细的检查当然是必要的。这不是你想要盲目翻译的代码,很有可能你只是在复制一个bug
所以真正的代码是:long result=firstParam&Math.Pow(2,secondParam)
否。请记住,VB6中的Long
是一个32位整数,您需要C#中的int
。并且您确实不想使用浮点数学。正确的转换是:
int result = firstParam & (1 << secondParam);
int result=firstParam&(1Basic中的^运算符是Math.Pow()。因此在VB6中,它的计算结果为414&Math.Pow(2,0)==0x19E&1=0==False。请注意,将整数文本提高到0的幂次不是很有用,结果总是1
在C#中,^运算符是异或运算符,而不是相同的东西。只需使用1
更仔细的检查当然是必要的。这不是你想要盲目翻译的代码,很有可能你只是在复制一个bug
所以真正的代码是:long result=firstParam&Math.Pow(2,secondParam)
否。请记住,VB6中的Long
是一个32位整数,您需要C#中的int
。并且您确实不想使用浮点数学。正确的转换是:
int result = firstParam & (1 << secondParam);
int result=firstParam&(1Basic中的^运算符是Math.Pow()。因此在VB6中,它的计算结果为414&Math.Pow(2,0)==0x19E&1=0==False。请注意,将整数文本提高到0的幂次不是很有用,结果总是1
在C#中,^运算符是异或运算符,而不是相同的东西。只需使用1
更仔细的检查当然是必要的。这不是你想要盲目翻译的代码,很有可能你只是在复制一个bug
所以真正的代码是:long result=firstParam&Math.Pow(2,secondParam)