C Int与&&;,if-else总是返回true
这是我刚刚编写的一个代码段,每当它运行时,它总是返回“And或语句可以在变量中声明!”,不管发生什么。我对编码相当陌生,所以我不确定我做错了什么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运算符,因
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线索。&
运算符的结果为