'-' 作为布尔表达式有什么作用

What does '-' do as a boolean expression

我通常想做的是在 (x-3) > i 时检查。
我得到以下代码:

int main()
{
    int x = 10, i;

    for(i = 0; i < 15; i++) {
        if(x-3)
            printf("%d, ", x);

        x--;
    }

    return 0;
}

我不小心写了 (x-3) 而不是 (x-3 > i),我得到了这些结果:

10, 9, 8, 7, 6, 5, 4, 2, 1, 0, -1, -2, -3, -4,

数字 3 不见了。我知道它与 x-3 表达式有某种联系,但我还没有在 Google..

中找到明确的答案 有人有想法吗?谢谢...

在 C 中,如果表达式的值为 0(零),则表达式被认为是 false 所有其他值都被认为true. 因此,表达式 x - 3true 当且仅当 x != 3 这就是为什么你看到 3 在你的循环中被跳过。

这也适用于指针:空指针为 false, 所有其他指针为 true。您将看到这样的代码:

if (some_pointer) {
   do_something();
}

这里do_something();只有在some_pointer不是空指针的情况下才会执行。同样,空指针检查通常如下所示:

if (!some_pointer) {
    fprintf(stderr, "Encountered a null pointer\n");
    abort();
}

因为应用于指针的逻辑非运算符对空指针产生 1(真),对所有其他指针产生 0(假)。


更迂腐地说,当且仅当它比较等于0时,它才被认为是false。这个措辞有细微的差别,如 e。 G。空指针可能没有 value 0 但它比较等于 integer literal 0.

早上好朋友!所以 if(expression) 仅在表达式等于 true 时执行。在 C(以及 C++ 和其他地方......)0 = false所有其他数字 = true(例外是 null

所以当x = 3,x-3 = 0。所以 if(x-3) 等于 false。因此程序永远不会到达打印语句。

随着你的进行,你将 x 从 10 递减,所以最终 x 将等于 3,此时你将无法到达打印语句。

希望对您有所帮助!

当你写if(x-3)时,如果条件表达式的计算结果为0,它被认为是假的,if括号内的代码将是discarded.if它的计算结果为非零值,它被认为是 true 并执行里面的代码。

就是代减运算符的意思。:)

根据 C 标准(6.8.4.1 if 语句)

2 In both forms, the first substatement is executed if the expression compares unequal to 0. In the else form, the second substatement is executed if the expression compares equal to 0. If the first substatement is reached via a label, the second substatement is not executed.

在这个 if 语句中

 if(x-3)

表达式 x - 3 的计算结果总是非零值,除非 x 等于 3.

所以当x不等于3这个语句

printf("%d, ", x);

被执行并输出x的当前值。

x 等于 3 时跳过此语句。

结果明确表明了这一点

10, 9, 8, 7, 6, 5, 4, 2, 1, 0, -1, -2, -3, -4
                    ^^^ 3 is absent

循环迭代15次但只输出14个x值。由于 if 语句中的表达式,x 等于 3 的值被跳过。

当使用if()语句时,是否输入if语句的主体取决于()中表达式的true/false。

注意:在 C 中,0 等同于 false。

当x为3时,表达式x-3为0/false,所以不输入if的正文。