假设我们x
是一个整数。
有理由偏好x <= 1
或x < 2
吗?我的意思是,如果一个可能更快或更可读。
这个问题是语言独立的,如果两种语言的答案不同,请告诉我。
答案 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 <= -0x80000000
和x < -0x7fffffff
(请注意-0x80000000 < -0x7fffffff
)且x
的类型为int
,则结果取决于x的值:
-0x80000000 : 1 1
-0x7fffffff .. -1 : 0 0
0 .. 0x7fffffff: 1 0
换句话说,对于所有非负x
,结果会有所不同。
同样,通过比较x <= 0x7fffffff
和x < 0x80000000
(常量0x7fffffff < 0x80000000
之间的关系仍然成立),我们得到:
-0x80000000 .. -1 : 1 0
0 .. 0x7fffffff: 1 1
现在x
的所有负值的结果都不同。
显然,有一些打字规则和类型转换(它们在C语言标准中描述),但关键是两个比较在边界情况下是不可替换的。