这是我刚刚创建的一个片段,无论何时运行,它总是返回“And或语句可以在变量中声明!”,无论如何。我对编码很新,所以我不确定我做错了什么。
int test = 2 && 20;
if(test == 4 || 3){
printf("\nAnd or statements can be declared in variables!");
}
else {
printf("Looks like they cant.");
答案 0 :(得分:3)
在你的任务中,你有一个AND运算符,所以你只能分配FALSE或TRUE。
然后你的if语句没有做你认为它做的事情! ==
的{{3}}比||
高int test = 2 && 20; // assign's TRUE
((TRUE == 4) || 3) //->(FALSE || 3)
(FALSE || TRUE) -> TRUE
因此会首先评估它:
(test == 4 || test == 3)
我认为你想要的是:
if(4 == test)
此外,我认为您要为int变量分配一个数字int值,而不是AND操作。
供参考:
如果你这样做的话(Yoda条件):
if(test = 4)
你可以更好地“保护”这样的拼写错误:{{1}}
答案 1 :(得分:3)
if(test == 4 || 3)
此语句将始终返回true,因为3
(非零号码)始终表现为TRUE
,而{ {1}}运算符如果其中一个或两个操作数均为OR
,则返回TRUE
。
将其更改为:
TRUE
此外,
if (test == 4 || test == 3)
将始终将值1分配给int test = 2 && 20;
,因为当两个操作数都不为零时,您将存储test
运算符的结果。
如果您想使用Bitwise AND运算符,
AND
答案 2 :(得分:0)
你做的第一个声明:
int test = 2 && 20;
可以改写为:
int test = ( 2 && 20 );
这里,你没有分配int值,你要分配布尔表达式的结果,它是0或1.所以我们可以重写:
int test;
if ( 2 && 20 )
{
test = 1;
}
else
{
test = 0;
}
现在,表达式(2 && 20)
已扩展为:( ( 2 != 0) && (20 != 0))
因此,代码中的第一个表达式是:
int test;
if ( (2 != 0) && (20 != 0) )
{
test = 1;
}
else
{
test = 0;
}
我猜,test
始终为1
。
现在,声明:
if (test == 4 || 3)
转换为:
if ((test == 4) || ( 3 != 0))
因此,无论test
值为何,结果始终为true
(1
)