而是x <= 1或x <1。 2?

时间:2017-06-19 07:25:50

标签: language-agnostic operators

假设我们x是一个整数。

有理由偏好x <= 1x < 2吗?我的意思是,如果一个可能更快或更可读。

这个问题是语言独立的,如果两种语言的答案不同,请告诉我。

3 个答案:

答案 0 :(得分:2)

通常当我遍历基于零的集合时,我使用i < col.Length,因为它比i <= col.Length - 1更具可读性。如果我从1迭代到x,我使用for (int i = 1; i <= x ...),因为它比< x + 1更具可读性。两个theese指令都有相同的时间要求(至少在x86架构上),所以是的,它只是关于可读性。

答案 1 :(得分:1)

我会说这取决于您的软件的要求,是否指定www.example.com需要为一个或更少,还是指定x需要少于两个?

如果您曾将x更改为允许小数点的数字类型,那么哪种方式效果最好?这种情况比您想象的更频繁,并且可能会引入一些有趣的错误。

答案 2 :(得分:0)

一般来说,没有证据证明文字1和2有什么类型。在大多数语言中它们将是相同的,但理论上它们可能是不同的,然后两个比较的结果也可能不同。此外,在大多数语言中,整数不是无限的,因此边界上的行为可能不同。

在普通C中,如果比较为x <= -0x80000000x < -0x7fffffff(请注意-0x80000000 < -0x7fffffff)且x的类型为int,则结果取决于x的值:

-0x80000000                    : 1 1
-0x7fffffff .. -1              : 0 0
                0 .. 0x7fffffff: 1 0

换句话说,对于所有非负x,结果会有所不同。

同样,通过比较x <= 0x7fffffffx < 0x80000000(常量0x7fffffff < 0x80000000之间的关系仍然成立),我们得到:

-0x80000000 .. -1              : 1 0
                0 .. 0x7fffffff: 1 1

现在x的所有负值的结果都不同。

显然,有一些打字规则和类型转换(它们在C语言标准中描述),但关键是两个比较在边界情况下是不可替换的。