将VB.NET中的按位和/或非按位转换为C#
原始代码(VB.NET): 更改代码(C#): 但这给了我一个错误: 接线员‘!’无法应用于“long”类型的操作数 ES_编号的数据类型为long。我试着把它改成int,string等等,但都不起作用将VB.NET中的按位和/或非按位转换为C#,c#,vb.net,c#-to-vb.net,C#,Vb.net,C# To Vb.net,原始代码(VB.NET): 更改代码(C#): 但这给了我一个错误: 接线员‘!’无法应用于“long”类型的操作数 ES_编号的数据类型为long。我试着把它改成int,string等等,但都不起作用 如何解决此问题?和与&相同;你说得对Not在Long前面是一个按位Not运算符。C的等价物是~ C#代码是: curStyle = curStyle & (~ES_NUMBER); 请查看,解释C#按位运算符。单个与通常是按位运算,但感叹号是逻辑运算。如果需要逻辑AND,则需要使用l
如何解决此问题?
和
与&
相同;你说得对Not
在Long
前面是一个按位Not运算符。C的等价物是~
C#代码是:
curStyle = curStyle & (~ES_NUMBER);
请查看,解释C#按位运算符。单个与通常是按位运算,但感叹号是逻辑运算。如果需要逻辑AND,则需要使用la:
curStyle = curStyle && (!ES_NUMBER);
或者,如果您需要一点智慧,可以使用瓷砖,并且:
curStyle = curStyle & (~ES_NUMBER);
再一次,浏览文档证明了这一点: : 逻辑求反运算符(!)。。。为bool定义,当且仅当其操作数为false时才返回true 文档中没有任何关于数值表达式行为的内容,我希望这意味着操作符根本没有定义为使用这些表达式 另一方面: 对于数值表达式,Not运算符反转任何数值表达式的位值,并根据下表在结果中设置相应的位 所以现在的问题是:如何重现VB.NET对C#的“Not”行为?谢天谢地,这并不难:你可以使用 而且,为了更好地衡量,以下是: 对于整数类型,&计算其操作数的按位AND 关键问题是(没有提供答案):
curStyle
是整数还是布尔?您是在试图获取真值(bool、真/假),还是在试图屏蔽位字段中的位
对于前一种情况,curStyle
是bool(真值),您可以说:
curStyle = curStyle && !ES_NUMBER ;
后一种情况下,curStyle
是一个整数类型,您希望操作它的位,需要:
curStyle = curStyle & ~Not ES_NUMBER ;
一个单独的“与”符号并不总是有点明智和明智。考虑(true和false)这是一个逻辑的。@ Gabe:是的,我只是在VB中查了<代码>和和<代码>不是< /COD>关键字。有趣的是,它们是隐式工作的。当VB 7在beta版(即VB.NET)时,关于是保持这种方式还是创建显式的BitAnd、BitOr和BitNot运算符,存在着巨大的争论。@Jonathan Allen:隐式工作似乎还可以。我很喜欢,去拿反光镜。它将向您展示此转换和许多其他转换。
~
是按位补码运算符,它翻转操作数中的每一位。ES_数是一个长数。因此(不是ES_数)是一个很长的问题。这反过来意味着如果使用严格的类型检查,curStyle必须是长的代码>。
curStyle = curStyle & (~ES_NUMBER);
curStyle = curStyle && !ES_NUMBER ;
curStyle = curStyle & ~Not ES_NUMBER ;