Skip to content

逻辑运算对0.0的处理不正确 #889

@oiuv

Description

@oiuv

在C语言中非零即真,0值为假,包括0、0.0、'\0',在LPC下应该和C是一致的,我也是这么理解和使用的,但无意中发现单独使用是判断为假,但0.0||10.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不一致。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions