-
Notifications
You must be signed in to change notification settings - Fork 209
逻辑运算对0.0的处理不正确 #889
Copy link
Copy link
Closed
Description
在C语言中非零即真,0值为假,包括0、0.0、'\0',在LPC下应该和C是一致的,我也是这么理解和使用的,但无意中发现单独使用是判断为假,但0.0||1和0.0&&1时0.0被理解为真。如下示例:
int main(object me, string arg)
{
// 以下结果正常(判断为假)
if (0 || '\0')
write("真\n");
else
write("假\n");
if (0.0) // 判断为假
write("真\n");
else
write("假\n");
0.0 ? write("True\n") : write("False\n");
// 以下结果错误(0.0在||和&&运算被理解为true)
// 当前逻辑:0.0 || 1 => 0.000000 => 假
if (0.0 || 1)
write("真\n");
else
write("假\n");
// 当前逻辑:0.0 && 1 => 1 => 真
if (0.0 && 1)
write("真\n");
else
write("假\n");
printf("%O\n", 0.0 || 1); // 输出0.000000
printf("%O\n", 0.0 && 1); // 输出1
return 1;
}输出结果:
假
假
False
假
真
0.000000
1
另外,0.0==0返回0,这个也和 1 == 1.0 返回1不一致。
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels