原始代码(VB.NET):
curStyle = curStyle And (Not ES_NUMBER)
更改了代码(C#):
curStyle = curStyle & (!ES_NUMBER);
但它给了我这个错误:
运营商'!'不能应用于'long'类型的操作数
ES_NUMBER的数据类型为long。我尝试将其更改为int,string等。所有都不起作用。
如何解决这个问题?
答案 0 :(得分:9)
And
与&
相同;你说得对Not
前面的Long
是一个按位NOT运算符。 C#等价物是~
。
C#代码将是:
curStyle = curStyle & (~ES_NUMBER);
查看 Bitwise operators in c# OR(|), XOR(^), AND(&), NOT(~) ,解释C#按位运算符。
答案 1 :(得分:2)
再一次,文件之旅证明了教学:
逻辑否定运算符(!)...是为bool定义的,当且仅当其操作数为false时才返回true。
文档中没有关于数值表达式的任何行为的任何内容,我希望这意味着操作符未被定义为完全使用这些表达式。
另一方面,MSDN has this to say about VB.NET's Not operator:
对于数值表达式,Not运算符反转任何数值表达式的位值,并根据下表设置结果中的相应位...
现在的问题是:如何重现VB.NET的“不”用于C#的行为?值得庆幸的是,这并不难:您可以使用~ operator。
curStyle = curStyle & (~ES_NUMBER);
而且,好的衡量标准是documentation on &:
对于积分类型,&计算其操作数的按位AND。
答案 2 :(得分:0)
单个&符通常是一个按位操作,但感叹号是一个逻辑操作。如果您需要逻辑AND:
,则需要使用two ampersands la C++curStyle = curStyle && (!ES_NUMBER);
如果你想要一个按位的AND,或者代字号:
curStyle = curStyle & (~ES_NUMBER);
答案 3 :(得分:0)
关键问题是(并且没有提供答案):curStyle
是整数还是布尔?你是想获得一个真值(bool,是/否),还是你试图掩盖位域中的位?
对于前一种情况,curStyle
是一个bool(真值),你说:
curStyle = curStyle && !ES_NUMBER ;
后一种情况,其中curStyle
是一个整数类型,你想操纵它的位,需要:
curStyle = curStyle & ~Not ES_NUMBER ;