为啥无论分配给变量 a 的值如何,我总是得到 1 作为答案
Posted
技术标签:
【中文标题】为啥无论分配给变量 a 的值如何,我总是得到 1 作为答案【英文标题】:Why am I always getting 1 as answer irrespective of the value assigned to the variable a为什么无论分配给变量 a 的值如何,我总是得到 1 作为答案 【发布时间】:2021-08-16 11:36:05 【问题描述】:为什么我得到 1 作为输出而不是 7 (如果 a 最初分配了 12 ,那么 a-5 应该给出 7 )或 3 (如果 a 分配有 8 那么 a-5 应该给出 3 )。无论分配给 a 的值如何,输出始终保持为 1。
int main()
int a = 12;
if (a = 8 && (a = a - 5))
cout << a;
else
//do nothing !!
【问题讨论】:
=
是赋值,你想让==
检查是否相等
你的意思是a==8吗?
&&
的优先级高于分配,请参阅en.cppreference.com/w/cpp/language/operator_precedence
【参考方案1】:
在此示例中,因为首先评估 8 && (a = a - 5)
始终为真且等于 1,然后它将分配给 a 这就是它变为 1 的原因。
如果您看到 here,它将显示首先 &&
将评估然后 =
即使您更改数字,结果也会变为 1。
应该按这个顺序写:
if ((a = 8) && (a = a - 5))
【讨论】:
【参考方案2】:除了 if 语句中的条件外,不清楚您要做什么
if (a = 8 && (a = a - 5))
等价于
if ( a = ( 8 && (a = a - 5 ) ) )
所以逻辑与运算符的结果为真,因为左操作数8
不等于0
,而表示赋值表达式a = a - 5
的右操作数也不等于0。所以a
被赋值为赋值 (a = true
) 中的布尔值 true
转换为 1
。
要获得预期的结果 3,您必须编写类似的条件
if ( ( a = 8 ) && (a = a - 5))
【讨论】:
以上是关于为啥无论分配给变量 a 的值如何,我总是得到 1 作为答案的主要内容,如果未能解决你的问题,请参考以下文章
为啥 Oraoop 1.6 在分配内存块之前要等待 1.5 分钟?