' - '作为布尔表达式做什么

时间:2015-11-20 16:05:12

标签: c if-statement 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表达式有关的东西,但我还没有在谷歌找到一个明确的答案。

有没有人有想法?感谢...

5 个答案:

答案 0 :(得分:9)

在C中,如果表达式的值为0(零),则 false 所有其他值都被视为 true。< / em>因此,表达式x - 3 true 当且仅当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。空指针可能没有 0,但它比较等于整数文字 0

答案 1 :(得分:4)

它只是意味着构造运算符。:)

根据C标准(6.8.4.1 if语句)

  

2 在两种形式中,如果是,则执行第一个子语句   表达式比较不等于0 。在else形式中,第二个   如果表达式比较等于0,则执行子语句。如果   通过标签到达第一个子语句,第二个子语句是   没有执行。

在此if语句中

_Atomic
除非stdatomic.h等于 if(x-3) ,否则

表达式x - 3始终会计算为非零值。

所以x不等于3这句话

x
执行

并输出当前值3

printf("%d, ", x); 等于x时,会跳过此语句。

结果明确地证明了这一点

x

循环迭代15次,但只输出14个x值。由于if语句中的表达式,将跳过3等于10, 9, 8, 7, 6, 5, 4, 2, 1, 0, -1, -2, -3, -4 ^^^ 3 is absent 的值。

答案 2 :(得分:1)

早上的朋友!因此,如果(表达式)仅在表达式等于true时继续执行。在C(和C ++和其他地方..) 0 =错误所有其他数字=真(例外是var elem = document.getElementsByClassName('link-linkedin') var list = elem.getElementsByTagName('a')

因此,当Uncaught TypeError: elem.getElementsByTagName is not a function(…)null时。所以x = 3等同于假。因此程序永远不会到达打印声明。

随着你的进展,你将x从10递减,所以最终x将等于3,此时你不会得到打印声明。

希望这有帮助!

答案 3 :(得分:0)

当你编写if(x-3)时,如果条件表达式的计算结果为0,则认为是false,并且if括号内的代码将被丢弃。如果它的计算结果为非零值,则认为是真的,里面的代码被执行。

答案 4 :(得分:0)

使用if()语句时,是否输入if语句的正文,具体取决于()中表达式的真/假。

注意:在C中,0与false相同。

当x为3时,表达式x-3为0 / false,因此未输入if的正文。