我不假思索地编写了一些代码来检查结构的所有值是否都设置为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编译了代码.
我试图建立三个相等变量的相等,但下面的代码不打印应该打印的明显正确的答案.有人可以解释,编译器如何解析if(condition)内部给定的?
#include<stdio.h>
int main()
{
int i = 123, j = 123, k = 123;
if ( i == j == k)
printf("Equal\n");
else
printf("NOT Equal\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
manav@workstation:~$ gcc -Wall -pedantic calc.c
calc.c: In function ‘main’:
calc.c:5: warning: suggest parentheses around comparison in operand of ‘==’
manav@workstation:~$ ./a.out
NOT Equal
manav@workstation:~$
Run Code Online (Sandbox Code Playgroud)
编辑:
通过下面给出的答案,以下声明可以检查上面的相等吗?
if ( (i==j) == (j==k))
Run Code Online (Sandbox Code Playgroud) 比较多个变量以查看它们是否都是相同值的最简单方法是什么?例如,如果var1 = 53,我想检查var2或var3是否等于var1和彼此?到目前为止,我已经这样做了:
if(row1==row2==row3==row4==col1==col2==col3==col4==diag1==diag2)
cout << "It is a magic square";
else
cout << "Not a magic square";
Run Code Online (Sandbox Code Playgroud)
然而,这似乎不起作用.谢谢你的帮助.
以下程序的输出是“不相等”,但是我希望“他们是平等的”三个变量相比(x,y,和z)相等。为什么?
#include <iostream>
int main()
{
int y, x, z;
y = 3;
x = 3;
z = 3;
if (x == y == z)
{
std::cout << "they are equal\n";
}
else
{
std::cout << "they are not equal\n";
}
}
Run Code Online (Sandbox Code Playgroud)