我不假思索地编写了一些代码来检查结构的所有值是否都设置为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编译了代码.
考虑:
#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?
这两者在逻辑上是相同的,但它们的工作方式不同:
if (e >='A' && e <= 'Z')
Run Code Online (Sandbox Code Playgroud)
和
if('A' <= e <= 'Z')
Run Code Online (Sandbox Code Playgroud)
第一行代码正常,但第二行不正常.为什么?