急切运算和短路运算之间的区别是什么?(|与||以及&与&&)

15 浏览
0 Comments

急切运算和短路运算之间的区别是什么?(|与||以及&与&&)

我正在(仍在)学习C#,我本以为我理解了&&&之间以及|||之间的区别…\n然而,刚刚阅读了另一份指南后,我清楚地意识到我并没有理解。我写了一个简单的真值表,和我之前想的一样,它们返回的结果是相同的。根据我所阅读的内容,使用双符号似乎是一个更好的解决方案,但我对它们的区别有些困惑,想知道是否有人可以解释/举个例子说明为什么/何时你会使用其中之一而不是另一个 - 我尝试阅读了MSDN的示例,但让我比刚开始时更困惑了!\n(如果有人能提出一个更好的标题,可以随意更改...非常难以写出一个!)

0
0 Comments

|| 和 && 是用于布尔值的。当使用它们时,你的输出是有意义的。

& 和 | 是位运算符,意味着它们逐位应用于操作数。例如,

110010010 |
001000100 =
111010110

使用你程序输出的相同表格,但是每次处理一个位。它们主要用于整数,而不是布尔值。

这是不正确的。在 C# 中,你可以使用 &| 来处理布尔表达式,请参考我的答案。

解决方法:

为了解决这个问题,我们需要明确区分位运算符和逻辑运算符的使用方式。如果我们想要进行逻辑运算,我们应该使用逻辑运算符 || 和 &&,它们是针对布尔值的。而如果我们想要进行位运算,我们应该使用位运算符 | 和 &,它们是逐位操作整数的。

使用逻辑运算符时,应该注意以下几点:

- 使用 || 运算符时,如果第一个操作数为真,则不会计算第二个操作数,因为只要有一个操作数为真,整个表达式的结果就为真。

- 使用 && 运算符时,如果第一个操作数为假,则不会计算第二个操作数,因为只要有一个操作数为假,整个表达式的结果就为假。

使用位运算符时,应该注意以下几点:

- 位运算符 | 和 & 针对操作数的每个对应位进行操作,而不是整个操作数。这意味着如果我们对两个整数进行位运算,每个对应位都会进行计算。

- 位运算符 | 和 & 主要用于处理整数,而不是布尔值。

总结起来,正确使用逻辑运算符和位运算符是解决这个问题的关键。我们应该根据具体情况选择适当的运算符,以确保得到正确的结果。

0
0 Comments

热切操作和短路操作之间的区别是什么?(|与||以及&与&&)这个问题的出现的原因是因为问题的标题和内容不匹配。热切操作和短路操作是计算机编程中的概念,涉及到逻辑运算符的使用。热切操作是指对于逻辑或和逻辑与运算符(|和&),无论左侧条件是否满足,都会对右侧条件进行计算。而短路操作是指对于逻辑或和逻辑与运算符(||和&&),如果左侧条件满足或不满足,就不会对右侧条件进行计算。这两种操作在逻辑判断中起到不同的作用。解决方法是要注意使用正确的逻辑运算符,根据具体的逻辑需求选择合适的操作符。在VB.NET中,可以使用And/AndAlso和Or/OrElse来代替C#中的&和|,AndAlso相当于&&,OrElse相当于||。这是因为不同的编程语言可能有不同的逻辑运算符的命名和使用规则。在编程中,正确理解和使用逻辑运算符是非常重要的,可以避免出现逻辑错误和性能问题。

0
0 Comments

什么是急切操作和短路操作的区别?(|与||以及&与&&)

在编程中,我们经常会遇到逻辑运算符,比如 &&、||、&、|。它们可以用来进行条件判断和逻辑运算。但是在使用这些运算符的时候,我们需要注意它们的区别。

&可以用于两种不同的方式:位运算符“与”和逻辑运算符“与”。

逻辑运算符&和&&的区别仅在于,如果使用&,即使第一个表达式已经为false,第二个表达式也会被计算。这在某些情况下是有意义的,比如在循环中初始化两个变量:

if ((first = (i == 7)) & (second = (j == 10))) { //do something }

如果使用这种语法,无论如何,first和second都将有一个值。但是如果使用

if ((first = (i == 7)) && (second = (j == 10))) { //do something }

在计算后,可能只有first有一个值。

对于|和||也是一样的:如果使用|,两个表达式都会被计算,如果使用||,只有第一个表达式会被计算,这种情况只有第一个表达式为true时才会发生。

与此相反,在其他应用中,&&可能是更好的选择。例如,如果myNumber是int?类型,你可以这样写:

if (myNumber != null && myNumber.Value == 7)

这样只会首先计算myNumber != null,只有在null检查通过时才会计算第二个表达式。

而如果使用

if (myNumber != null & myNumber.Value == 7)

如果myNumber为null,则在计算第二个表达式时会导致NullPointerException。因此,在这种情况下,应该使用&&。

需要注意的是,以上是对这个问题的解答,但是在编写代码时,最好不要过分依赖这些运算符来确保副作用的发生。最好尽可能明确地编写代码,这样可以方便后续维护代码的人员进行调试。

感谢你的提示,你可能是对的。我会在以后的编程中考虑这一点。

实际上,对空的可空类型调用Value会导致InvalidOperationException异常。

0