相关疑难解决方法(0)

链接Bool值给出了预期的相反结果

我不假思索地编写了一些代码来检查结构的所有值是否都设置为0.为了实现这一点,我使用了:

bool IsValid() {
    return !(0 == year == month == day == hour == minute == second);
}
Run Code Online (Sandbox Code Playgroud)

其中所有struct成员都是unsigned short类型.我使用代码作为更大测试的一部分,但注意到它对于不等于零的值返回false,对于全部等于零的值则返回true - 与我预期的相反.

我将代码更改为:

bool IsValid() {
    return (0 != year) || (0 != month) || (0 != day) || (0 != hour) || (0 != minute) || (0 != second);
}
Run Code Online (Sandbox Code Playgroud)

但是想知道是什么导致了奇怪的行为.这是优先的结果吗?我试过谷歌这个答案,但没有发现任何东西,如果有任何术语来描述我想知道它的结果.

我使用VS9和VS8编译了代码.

c c++ compiler-construction boolean operator-precedence

15
推荐指数
3
解决办法
2410
查看次数

C中的复合条件:if(0.0 <a <1.0)

我最近注意到以下表达式在我的编译器(Clang)中编译:

float a;
if (0.0 < a < 1.0) { ... }
Run Code Online (Sandbox Code Playgroud)

这是否符合我的期望?我希望它的评估与这种情况相同:

if (0.0 < a && a < 1.0) { ... }
Run Code Online (Sandbox Code Playgroud)

如果是这样,那么何时以及与其他编译器一起编写这种简短形式的条件?

c expression if-statement conditional-statements

3
推荐指数
2
解决办法
1369
查看次数

A> = B> = C中的C运算符?

考虑:

#include<stdio.h>

int main() {
    if (2 >= 1 >= 1)
        printf("1\n");
    if (200 >= 100 >= 100)
        printf("2\n");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

nyc @ nyc:〜/ PRG $ gcc sample.c

nyc @ nyc:〜/ PRG $ ./a.out 1

为什么即使第二个表达式的计算结果为TRUE,该程序也只打印1?

c

1
推荐指数
2
解决办法
220
查看次数