Vb.net VB-和AndAlso-使用And运算符的原因是什么?

Vb.net VB-和AndAlso-使用And运算符的原因是什么?,vb.net,Vb.net,在计算表达式时,和优于和的情况是什么?我假设前面的关键字只是为了向后兼容而存在的,但仍然遇到使用和的示例 谢谢 --问题已按要求编辑,以使其(更多?)独特 我读了这个问题 我理解And和AndAlso的概念差异,这不是我所问的,因为通过阅读可以辨别出来。这样一来,我就看不出这是一个重复的问题,到目前为止已经有了一个明确的答案 再次感谢。有三个原因可以使用和而不是和(虽然VB.Net操作符并不总是与C#操作符直接比较,但这也适用于C#中的&和&) 第一种情况是不比较布尔值,而是进行逐位比较 13

在计算表达式时,
优于
的情况是什么?我假设前面的关键字只是为了向后兼容而存在的,但仍然遇到使用
的示例

谢谢 --问题已按要求编辑,以使其(更多?)独特

我读了这个问题

我理解And和AndAlso的概念差异,这不是我所问的,因为通过阅读可以辨别出来。这样一来,我就看不出这是一个重复的问题,到目前为止已经有了一个明确的答案


再次感谢。

有三个原因可以使用
而不是
(虽然VB.Net操作符并不总是与C#操作符直接比较,但这也适用于C#中的
&
&

第一种情况是不比较布尔值,而是进行逐位比较

13 And 92     ' 12
13 AndAlso 92 ' True
第二种情况是,由于副作用,您希望确保计算这两个表达式。但是,在这种情况下,我建议您先计算它们,然后再执行
,以使代码更清晰

第三是避免分支。考虑一下:

If x AndAlso y Then
' Do something
End If
其工作原理与:

If x Then
  If y Then
  ' Do Something
  End If
End If
现在,按照现代计算机的工作方式,处理器在知道下一条指令是否真的是下一条指令之前,已经阅读了下一条指令,因为它还没有确定它是否会遵循
If
分支。有一些聪明的东西在猜测一根树枝是否会被拿走,但这些聪明的东西仍然只是猜测。如果它猜错了,那么它必须后退,这会减慢速度


因此,如果计算
AndAlso
的第二个参数所需的时间小于某个阈值,那么
实际上可能会更快,因为在第一个参数为
False的情况下,
在概念上比
AndAlso
做的工作更多(允许
短路)只有一个分支可以预测,而不是两个分支,并且正确猜测哪个分支更大的几率更大。(在此处搜索“分支预测”和“分支预测失误”,了解有关一般问题的更多信息).

有三个原因可以使用
而不是
(虽然VB.Net操作符并不总是与C#操作符直接比较,但这也适用于C#中的
&
&

第一种情况是不比较布尔值,而是进行逐位比较

13 And 92     ' 12
13 AndAlso 92 ' True
第二种情况是,由于副作用,您希望确保计算两个表达式。但是,在这种情况下,我建议您先计算它们,然后执行
后执行,以使代码更清晰

第三是避免分支,考虑:

If x AndAlso y Then
' Do something
End If
其工作原理与:

If x Then
  If y Then
  ' Do Something
  End If
End If
现在,按照现代计算机的工作方式,处理器在知道下一条指令是否真的是下一条指令之前,已经阅读了下一条指令,因为它还没有确定它是否会跟随一个
如果
分支。有一些聪明的东西猜测一个分支是否会被执行,但是聪明的东西仍然只是猜测。如果它猜错了,那么它就必须后退,这会减慢速度


因此,如果计算
AndAlso
的第二个参数所需的时间小于某个阈值,那么
实际上可能会更快,因为在第一个参数为
False的情况下,
在概念上比
AndAlso
做的工作更多(允许
短路)只有一个分支可以预测,而不是两个分支,并且正确猜测哪个分支更大的几率更大。(在此处搜索“分支预测”和“分支预测失误”,了解有关一般问题的更多信息).

如果您正在测试多个函数的布尔结果,那么可能会出现重复?如果PostToAccounts()和RollOverTax()以及PayEmployee()的情况下?在链接问题中,这解决了您的问题,即为什么您可能希望使用
而不是
,并且
是在VB中执行位操作的唯一方法(如副本中所述)如果您正在测试多个函数的布尔结果,那么可能会出现重复情况?如果PostToAccounts()和RollOverTax()以及PayEmployee())?在链接问题中,这解决了您的问题,即为什么您可能希望使用
而不是
,并且
是在VB中执行位操作的唯一方法(如副本中所述)你对处理器推测性执行的评论让我想知道vb/c编译器和.NET jitter在这方面有多聪明——也就是说,它是否可以判断使用
时是否有副作用,如果没有,是否可以将其转换为推测性执行友好的代码……这是另一个需要添加到不断增加的调查内容列表中的主题…@JamesThorpe在大多数情况下都是否定的,尽管可能有例外。一个问题是,通常很难仅从代码中预测哪一个分支更常见;如果是这样,那么分支预测器已经在做这类工作了。可能性取决于实际处理的数据以及对于表达式本身,需要从更大的角度来合理猜测
何时会比
快。不过,您可以注意到,可空值的提升往往使用
和/&
而不是
和/&
how@JamesThorpe…它结合了对
HasValue的检查与gettin