C Int与&&;,if-else总是返回true

C Int与&&;,if-else总是返回true,c,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."); 首先在赋值中有AND运算符,因

这是我刚刚编写的一个代码段,每当它运行时,它总是返回“And或语句可以在变量中声明!”,不管发生什么。我对编码相当陌生,所以我不确定我做错了什么

int test = 2 && 20;

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

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

首先在赋值中有AND运算符,因此只能赋值FALSE或TRUE

那么你的if语句并没有做你认为它做的事情
=
的值高于
|
,因此将首先对其进行如下计算:

int test = 2 && 20; // assign's TRUE

((TRUE == 4) || 3)  //->(FALSE || 3)
(FALSE || TRUE) -> TRUE
我想你想要的是:

(test == 4 || test == 3)
此外,我认为您希望为int变量指定一个数值int值,而不是and操作

供参考:

如果你这样做你的条件(尤达条件):


您可以更好地“保护”您不受以下输入错误的影响:
如果(test=4)

首先在赋值中有AND运算符,那么您只能赋值FALSE或TRUE

那么你的if语句并没有做你认为它做的事情
=
的值高于
|
,因此将首先对其进行如下计算:

int test = 2 && 20; // assign's TRUE

((TRUE == 4) || 3)  //->(FALSE || 3)
(FALSE || TRUE) -> TRUE
我想你想要的是:

(test == 4 || test == 3)
此外,我认为您希望为int变量指定一个数值int值,而不是and操作

供参考:

如果你这样做你的条件(尤达条件):

您可以更好地“保护”您免受这样的打字错误:
if(test=4)

此语句将始终返回true,因为
3
作为非零数,将始终表现为
true
,如果其一个或两个操作数均
true
,则作为
运算符返回
true

将其更改为:

if (test == 4 || test == 3)
而且

int test = 2 && 20;
将始终将值1赋给
测试
,因为当两个操作数均为非零时,存储的是
运算符的结果

如果你想使用操作符

int test = 2 & 20; //A single ampersand represents BITWISE AND.
此语句将始终返回true,因为
3
作为非零数,将始终表现为
true
,如果其一个或两个操作数均
true
,则作为
运算符返回
true

将其更改为:

if (test == 4 || test == 3)
而且

int test = 2 && 20;
将始终将值1赋给
测试
,因为当两个操作数均为非零时,存储的是
运算符的结果

如果你想使用操作符

int test = 2 & 20; //A single ampersand represents BITWISE AND.

你要做的第一件事是:

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

您执行的第一个语句:

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))

所以,无论
测试值是什么,结果总是
真的
1

你希望代码做什么?即
(任何布尔表达式| 3)
都是真的。所以,我想这意味着我需要复习一下我的逻辑运算符。那么,不允许在声明中使用逻辑运算符吗?当然允许。你只需要了解它们是如何工作的。表达式
2&&20
的计算结果为
1
,这是存储在
test
中的值。您是否希望表达式的条件性质保留在
测试中?顺便说一句,
2&&20
是一个表达式,而不是一个语句。你希望代码做什么?例如
(任何布尔表达式3)
都是真的。所以,我想这意味着我需要复习一下我的逻辑运算符。那么,不允许在声明中使用逻辑运算符吗?当然允许。你只需要了解它们是如何工作的。表达式
2&&20
的计算结果为
1
,这是存储在
test
中的值。您是否希望表达式的条件性质保留在
测试中?顺便说一句,
2&&20
是一个表达式,而不是一个语句。那么,如何为int test提供多个值呢?是否可能?您可以多次重新分配任何变量的值。当你重新分配一个变量的值时,以前的值会被新值覆盖。@EddyHamilton我真的不明白你的意思:一个给int test多个值?请说得更具体一点(你是说把数字加在一起分配还是重新分配一个变量?)。我已经得出结论,谢谢你的帮助!好的,那么如何给int-test提供多个值呢?是否可能?您可以多次重新分配任何变量的值。当你重新分配一个变量的值时,以前的值会被新值覆盖。@EddyHamilton我真的不明白你的意思:一个给int test多个值?请说得更具体一点(你是说把数字加在一起分配还是重新分配一个变量?)。我已经得出结论,谢谢你的帮助!详细信息:“您未分配int值”mis线索。
&
运算符的结果为