gpt4 book ai didi

c# - 哪个性能更高 : <= 0 or <1?

转载 作者:太空宇宙 更新时间:2023-11-03 17:07:08 25 4
gpt4 key购买 nike

在我学习 C 和汇编的那一天,我们被教导最好使用简单的比较来提高速度。例如,如果你说:

if(x <= 0)

对比

if(x < 1)

哪个执行得更快?我的论点(可能是错误的)是第二个几乎总是执行得更快,因为只有一个比较)即它是否小于一个,是或否。

如果数字小于 0,第一个将执行得很快,因为这等于 true,因此无需检查是否等于第二个,但是,如果数字为 0 或更多,因为它必须进行第二次比较以查看它是否等于 0。

我现在正在使用 C#,虽然为桌面开发速度不是问题(至少不是他的观点值得争论的程度),但我仍然认为需要考虑这些争论,因为我也在为移动设备开发其功能远不如台式机,速度确实成为此类设备的问题。

为了进一步考虑,我说的是整数(没有小数)和不能有负数的数字,如 -1 或 -12,345 等(除非有错误),例如,当你不能有负数的项目但你想检查列表是否为空时处理列表或数组时(或者如果有问题,将 x 的值设置为负值以指示错误,一个例子是是列表中的一些项目,但由于某种原因您无法检索整个列表,为了表明这一点,您将数字设置为负数,这与说没有项目不同)。

出于上述原因,我故意忽略了明显的部分

if(x == 0)

if(x.isnullorempty())

和其他用于检测没有项目的列表的项目。

同样,出于考虑,我们正在讨论从数据库中检索项目的可能性,也许使用具有上述功能的 SQL 存储过程(即标准(至少在这家公司)是返回一个负数来表示问题)。

那么在这种情况下,使用上面的第一项还是第二项更好呢?

最佳答案

它们是相同的。两者都不比对方快。他们都问完全相同的问题,假设 x是一个整数。 C# 不是汇编。您要求编译器生成最佳代码以获得您要求的效果。您没有指定它如何获得该结果。

另见 this answer .

My argument (which may be wrong) is the second would almost always execute faster because there is only a single comparison) i.e. is it less than one, yes or no.

显然这是错误的。如果您假设这是真的,请观察会发生什么:

<<= 快因为它问的问题更少。 (你的论点。)

><= 的速度相同因为它问的是同一个问题,只是答案倒过来了。

因此 <> 快!但同样的论点显示>< 快.

"just with an inverted answer" seems to sneak in an additional boolean operation so I'm not sure I follow this answer.

出于同样的原因,这是错误的(对于硅,有时对于软件是正确的)。考虑:

3 != 43 == 4 的计算成本更高,因为它是 3 != 4有一个相反的答案,一个额外的 bool 运算。

3 == 43 != 4贵,因为它是 3 != 4有一个相反的答案,一个额外的 bool 运算。

因此,3 != 4比自己贵。

反向答案只是相反的问题,而不是额外的 bool 运算。或者,更准确地说,它是将比较结果与最终答案进行不同的映射。两者 3 == 43 != 4要求您比较 3 和 4。该比较导致以太“相等”或“不相等”。这些问题只是将“相等”和“不相等”映射到“真”和“假”的不同方式。两种映射都不比另一种更昂贵。

关于c# - 哪个性能更高 : <= 0 or <1?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14384367/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com