"小于或等于"与"小于"的处理

Gau*_*hor 8 c java computer-science

请考虑以下条件:

if(a < 10)
Run Code Online (Sandbox Code Playgroud)

if(a <= 9)
Run Code Online (Sandbox Code Playgroud)

仅考虑int.

我知道这些条件具有相同的用途,加工差异可以忽略不计.然而,两者之间的处理差异是什么?

ind*_*ble 6

对于int并且long没有真正的区别,因为他们都处理整数.
这是因为9是低于10的下一个有效值.

但是float,double对于可以保持小于整数的值的其他类型,存在很大差异.

考虑一下这两个案例如何处理这些数字:

float a = 9.0
float b = 10.0
float c = 9.5
Run Code Online (Sandbox Code Playgroud)

编辑:

在第一种情况下if (val < 10):

a < 10  ... true
b < 10  ... false
c < 10  ... true    <--- note this
Run Code Online (Sandbox Code Playgroud)

第二种情况if (val <= 9):

a <= 9  ... true
b <= 9  ... false
c <= 9  ... false    <--- note this
Run Code Online (Sandbox Code Playgroud)

而这一切都是假设你最终获得"干净"的数字和舍入或部门的错误未出台,如9.9999999999910.000000000001通过你可以执行任何计算.

比较浮点数时,您应该使用该类的内置比较方法.

a.compare(value) < 0  ... true if 'a' is smaller than 'value'
a.compare(value) > 0  ... true if 'a' is bigger than 'value'
a.compare(value) == 0 ... true if 'a' is equal to 'value'
Run Code Online (Sandbox Code Playgroud)

  • 请注意,这就是为什么你有`{Double,Float} .compare()` (2认同)

Lio*_*onC 1

对于整数,程序的逻辑流程没有区别。

但不同的标准解决方案使用传统符号之一,并且由于这种非官方标准的坚持,它增加了使用“正确”符号的可读性,因为人们已经习惯了它。

性能方面,谈论编译为汇编器的语言,它们(在大多数体系结构上)都转换为一条直接处理器指令(条件跳转),使它们几乎相同。