Tag: 逻辑运算符

为什么Java和C#中的逻辑运算符和按位运算符有区别?

Java和C#等语言都有按位和逻辑运算符。 逻辑运算符仅对布尔操作数有意义,按位运算符也适用于整数类型。 由于C没有布尔类型并且将所有非零整数都视为真,因此逻辑和按位运算符的存在在那里是有意义的。 但是,Java或C#等语言具有布尔类型,因此编译器可以自动使用正确类型的运算符,具体取决于类型上下文。 那么,是否有一些具体的理由在这些语言中同时使用逻辑和按位运算符? 或者他们是否因熟悉原因而被包括在内? (我知道你可以在布尔上下文中使用“按位”运算符来规避Java和C#中的短路,但我从来不需要这样的行为,所以我想这可能是一个大多未使用的特殊情况)

c#中的逻辑评估器(评估逻辑(&&,||)表达式)

在我的项目中有一个Logic evaluation部分,它将输入作为包含logical expressions ( true/false )的字符串。 我想评估此字符串并返回最终的布尔值。 string Logic=”1&0|1&(0&1)” //string Logic=”true AND false OR true AND (false AND true)” 这将是我的Logic 。 长度可能会增加。 有没有办法从LINQ / Dynamic LINQ评估这个表达式?

&& =和|| =运算符

可能重复: 为什么Java没有条件和条件运算符的复合赋值版本? (&& =,|| =) 为什么“&& =”运算符不存在? 今天在工作中我写了以下LOC(b和b1的真实身份是保密:) b &&= b1; // meaning b = b && b1; 我盯着它看了几秒钟,发现没有这样的操作员。 只是为了确定,我点击了编译,但失败了。 为了确定我已经咨询了标准。 是否存在没有此类运营商的具体原因? 我能想到一些: 由于&&的短路评估, b &&= b1和b = b && b1可能不等效。 && =很难看 很少需要&& = 我并不认为拥有这样的运营商是非常有用的,不。 我也没有声称上述三个原因中的任何一个或全部都不足以避免创建该运营商。 我的问题如下:我可能有更严重的理由要监督吗?

C# – | 和&运营商?

编辑:我现在的主要问题是为什么需要重载这两个运算符才能使用&&和|| 运营商。 短路运营商不会采用对象的真值或假值并进行比较吗? 在哪里使用&&和|| 运营商是 和&使用? 我正在读C#,完整的参考资料,我对|很困惑 和&运营商。 我习惯于将它们作为比较运算符来比较两个整数的位,但它们被解释为原始逻辑运算符,其中&&和|| 是短语版本,当语句肯定是某个值时,它会停止测试值。 这是否意味着两个运算符有多种用途,或者C#是否在幕后类型转换中做了一些操作? 此外,使用&&和||时 一个类的运算符,为什么这样做 并且必须超载? 为什么不能只重载类的真值和假值?

C#If语句中条件的执行顺序

下面有两个if语句,它们使用逻辑运算符有多个条件。 逻辑上两者都相同,但检查顺序不同。 第一个工作,第二个工作失败。 我引用了MSDN来检查是否定义了执行条件的顺序; 但我找不到。 考虑具有&&作为逻辑运算符的多重检查条件。 是否保证始终检查第一个条件,如果不满足,则不会检查第二个条件? 我曾经使用方法1,它运作良好。 寻找certificate其使用的MSDN参考资料。 UPDATE 参考“短路”评估 码 List employees = null; if (employees != null && employees.Count > 0) { string theEmployee = employees[0]; } if (employees.Count > 0 && employees != null) { string theEmployee = employees[0]; }

短路声明评估 – 这有保证吗?

这里有关于C#中的短路语句的快速问题。 使用if语句: if (MyObject.MyArray.Count == 0 || MyObject.MyArray[0].SomeValue == 0) { //…. } 是否保证评估将在“MyArray.Count”部分后停止,前提是该部分为真? 否则我会在第二部分得到一个nullexception。

在C#中,BitArray获取比特值比使用逐位移位的简单结合更快吗?

1)。 var bitValue = (byteValue & (1 << bitNumber)) != 0; 2)。 使用带有Get(int index)方法的System.Collections.BitArray 什么更快? 在.NET项目的什么情况下, BitArray比按位移位的简单连接更有用?