Performance 我应该测试是否等于1还是不等于0?

Performance 我应该测试是否等于1还是不等于0?,performance,language-agnostic,coding-style,Performance,Language Agnostic,Coding Style,前几天我在这里编写代码,编写了几个if语句,其中的整数总是0或1(实际上充当bools)。我问自己: 检测阳性结果时,哪个更好;测试int==1或int!=0 例如,给定一个intn,如果我想测试它是否为true,我应该使用n==1还是n!=0 在速度、处理能力等方面有什么区别吗 请忽略一个事实,即int可能大于/小于1/0,这是不相关的,不会发生。人脑更好地处理不包含否定的语句,这使得“int==1”的方式更好。这取决于实际情况。如果您使用的语言支持布尔值,则应使用布尔值,而不是整数,即: i

前几天我在这里编写代码,编写了几个if语句,其中的整数总是
0
1
(实际上充当
bool
s)。我问自己:

检测阳性结果时,哪个更好;测试
int==1
int!=0

例如,给定一个int
n
,如果我想测试它是否为
true
,我应该使用
n==1
还是
n!=0

在速度、处理能力等方面有什么区别吗


请忽略一个事实,即int可能大于/小于
1
/
0
,这是不相关的,不会发生。

人脑更好地处理不包含否定的语句,这使得“int==1”的方式更好。

这取决于实际情况。如果您使用的语言支持布尔值,则应使用布尔值,而不是整数,即:

if (value == false)

也就是说,对于真正的布尔类型,只需编写以下代码就完全有效(通常更好):

if (!value)

在大多数现代语言中,几乎没有理由在布尔运算中使用整数

也就是说,如果您使用的语言不直接支持布尔值,那么这里的最佳选择实际上取决于您如何定义true和false。通常,
false
是0,
true
不是0。在这种情况下,使用
if(i==0)
(用于假检查)和
if(i!=0)
进行真检查


如果保证0和1是唯一的两个值,我可能会使用
If(I==1)
,因为否定更复杂,更容易导致维护错误。

如果只有两个值,那么我会使用第一个值:

if(int == 1)

因为它更明确。如果没有对值的约束,我会不这样认为。

(假设您的int只能是1或0),这两个语句在逻辑上是等价的。不过,我建议使用==语法,因为我认为在不引入不必要的否定时,大多数人会更清楚。

当使用整数作为布尔值时,我更喜欢将它们解释为:false=0,true=非零


我将把条件语句写成int==0int!=一个愚蠢的问题。如果你测试1,测试1,如果你测试0,测试0

添加
else
语句可能会使选择看起来是任意的。我会选择最有意义的,或者更具上下文意义的,默认或“自然”行为,比如预期发生频率


int==0
int!=1
很可能归结为不值得担心的主观评估。

如果您使用的值只能是1或0,那么我建议您首先使用布尔值,然后只使用
If(bool)
If(!bool)

在非0的int表示布尔值'true',0'false'的语言中,像C一样,我倾向于使用
if(int!=0)
,因为它表示与
if(int)
相同的含义,而
int==1
表示的更多是等于1的整数值,而不是布尔值true。也许只有我一个人。在支持布尔类型的语言中,始终使用它而不是int。

老实说,如果int的值仅为1或0,您甚至可以说:

if (int)
这就等于说

if (int != 0)
但你可能会想用

if (int == 1)

因为非零可能会让答案不是1,即使你说不用担心它。

如果你的意思是,我会说这取决于语义

while(!abort)
否定是正常的

如果(退出)中断也可以。

两点:

IF INT IS 1
NEXT SENTENCE
ELSE MOVE "INT IS NOT ONE" TO MESSAGE.
1) 如上所述,更加明确是一种胜利。如果您将某个内容添加到空列表中,您不仅希望它的大小不为零,而且还希望它显式为1

2) 你可能想做什么 (1==int) 这样,如果您忘记了an=,那么最终将出现编译错误,而不是调试会话

if( is_numeric( $int ) ) { its a number }
elseif( !$int ) { $int is not set or false }
else { its set but its not a number }

讨论结束:p

我同意大多数人在这篇文章中所说的话。如果您有两种不同的可能性,那么使用布尔值会更有效。它还使代码更易于阅读和解释


如果(bool){…}

我来自c世界。起初我对objective-c不太了解。过了一段时间,我更喜欢这样的东西:

if (int == YES)

在c中,即:

if (int == true)
if (int == false)
现在,我也使用
varchar
而不是
integer
作为表键,例如

 name   marital_status
------  --------------
 john      single
 joe       married
这比:

 name   marital_status
------  --------------
 john         S
 joe          M


正如其他人所说,使用
==
通常比使用
更容易阅读=

也就是说,大多数处理器都有一个特定的比较零操作。这取决于特定的编译器、处理器等,但使用
!=因此,0
超过
==1


不过,大多数语言都允许你使用
if(int)
if(!int)
,这两种语言既可读性更强,又能给你带来微乎其微的速度加成。

我有点偏执。如果值是
0
1
,则可能是
2
。可能不是今天,也可能不是明天,但是一些维护程序员会在子类中做一些奇怪的事情。有时候我自己也会犯错[嘘,别告诉我的老板]。所以,让代码告诉我值是
0
1
,否则它会哭

if (i == 0) {
    ... 0 stuff ...
} else if (i == 1) {
    ... 1 stuff ...
} else {
    throw new Error();
}

(你可能更喜欢
switch
——我发现它在花括号语言中的语法太重了。)

你不能说人类不喜欢使用不多的否定。W
 name   marital_status
------  --------------
 john      single
 joe       married
 name   marital_status
------  --------------
 john         S
 joe          M
 name   marital_status
------  --------------
 john         1
 joe          2
if (i == 0) {
    ... 0 stuff ...
} else if (i == 1) {
    ... 1 stuff ...
} else {
    throw new Error();
}