Int用&&和声明,如果else总是返回true

时间:2015-02-26 18:01:29

标签: c

这是我刚刚创建的一个片段,无论何时运行,它总是返回“And或语句可以在变量中声明!”,无论如何。我对编码很新,所以我不确定我做错了什么。

int test = 2 && 20;

if(test == 4 || 3){
    printf("\nAnd or statements can be declared in variables!");

}
else {
    printf("Looks like they cant.");

3 个答案:

答案 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值为何,结果始终为true1