Syntax >;0和>=1.

Syntax >;0和>=1.,syntax,Syntax,标题说明了一切。有什么理由让一些教授和程序员一般都写作吗 if ( x >= 1 ) 而不是 if ( x > 0 ) ?如果两者都是整数,则没有区别这取决于x的类型。如果它是一个完整的类型,它们是相同的,这是个人的喜好。我总是选择最短的x>0。但是,如果它是浮点/定点数字类型,则存在很大差异,因为0和1之间有许多值 然而,人们选择一个而不是另一个的原因可能有两个: 1) 为了明确目的:如果要求是“给我一个从一到多的整数”,那么他们使用x>=1,而如果要求是“给我一个正整数”,那

标题说明了一切。有什么理由让一些教授和程序员一般都写作吗

if ( x >= 1 )
而不是

if ( x > 0 )

如果两者都是整数,则没有区别

这取决于
x
的类型。如果它是一个完整的类型,它们是相同的,这是个人的喜好。我总是选择最短的
x>0
。但是,如果它是浮点/定点数字类型,则存在很大差异,因为0和1之间有许多值

然而,人们选择一个而不是另一个的原因可能有两个:

1) 为了明确目的:如果要求是“给我一个从一到多的整数”,那么他们使用
x>=1
,而如果要求是“给我一个正整数”,那么他们使用
x>0
。现在,当您稍后阅读代码时,您可以很容易地了解需求和意图。我认为这在学校里特别有用,可以在学生还在学习的时候把它讲清楚


2) 一些开发人员不知道自己在做什么,甚至对基础知识感到困惑,因此他们实现了如上所述的需求,而没有分析对性能、安全性等的影响。在我们这里的示例中,确实没有任何危害,但在其他一些代码中,这可能会有巨大的差异,我见过许多开发人员不知道这种差异和影响。

这里有一个性能方面的考虑-在某些情况下,CPU可以比0快,而不是1。一个聪明的编译器可能会对此进行优化,但如果可能,与0相比通常是更好的做法

编辑:关于这一点有点澄清- 处理器有一个“零”标志,当算术运算或比较指令的结果为零时设置该标志。还有一个“负面”标志。“比较”指令实际上与“减法”指令大致相同,只是结果未存储,但标志已设置

它确实取决于上下文,但如果该变量刚刚作为算术运算的结果被设置,并且现在为0,那么零标志将已经被设置,并且不需要比较指令来确定x是否大于0。当值为1时,需要与常数1进行比较以设置零标志,并满足条件

对于(伪代码)示例,一些编译器(我见过Delphi这样做)将进行优化

for x = 0 to 10 { print "hello world " }

这仅仅是因为它不需要每次都进行“将x与10进行比较”,因为在上一次迭代中,由于x的递减,零标志已经设置好了。当然,它只能在循环中没有引用x的情况下执行此操作,否则它将更改功能


维基百科对“零”标志做了进一步澄清:

使用其中一个在技术上没有区别(假定x是一个整数,显然是)

然而,选择其中一种比较可能具有语义意义。有人说:

如果有超过0个
X
es,则执行此操作。我可以处理任何数量的项目

另一个说

如果至少有1个
X
,请执行此操作。如果没有至少1项,我无法执行此操作


它们具有相同的含义,但表达方式不同,这有助于理解为什么要将它们与这些价值进行比较。

但我看到教授们一直在这样做。考虑到使用了一个额外的字符,我希望这会有一定程度的优点。@krystah-如果您使用混合数据类型,它会更干净。对于>0,您可能会对期望的内容感到困惑(是int,您在寻找1+,还是浮点可以小于1?),而对于>=1,您知道无论数据类型如何,您都在寻找1+的内容。如果我只处理整数,我会使用速记,但是如果我在代码中混合类型,我会使用较长的版本。OP甚至没有指定这是什么语言,如何提供这样的响应?如果
x
是整数,则没有。如果
x
是浮点/双精度/etc,则第二个也适用于任何
x>0
x<1
。第一个不会。你的变量的数据类型是什么?我们甚至不知道人们如何开始键入回复的语言是什么?我们教授现在使用的示例是整数类型,但这不是我第一次看到这个,我的雇主也用ints做了这件事。教授们并不以他们出色的编码实践而闻名。大多数程序员也不是,真的,真的?哪一个CPU,哪一个条件,哪一个编译器?是的,我想看一些证据来支持这一论点,这几乎是一件普通的事情。要与0以外的任何值进行比较,处理器将从另一个值中减去一个值,并根据结果设置零/负标志,尽管可能不会将结果存储在任何位置。如果你去汇编器,如果零的话分支和条件的话分支是有区别的,但是大多数编译器都知道如何正确地比较常数。这些东西不能被称为“一般的东西”——它非常非常具体
for x = 10 down to 0 { .. }