为啥无论分配给变量 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吗? &amp;&amp; 的优先级高于分配,请参阅en.cppreference.com/w/cpp/language/operator_precedence 【参考方案1】:

在此示例中,因为首先评估 8 &amp;&amp; (a = a - 5) 始终为真且等于 1,然后它将分配给 a 这就是它变为 1 的原因。

如果您看到 here,它将显示首先 &amp;&amp; 将评估然后 = 即使您更改数字,结果也会变为 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 分钟?

为啥在java中不允许分配给'this'?

如何将 Vue.js 2 组件值分配给主实例变量?

我无法在python中正确地将我想要的值分配给一个变量[重复]

将`input`的值分配给变量但在JS中返回空白

分配给On Error Resume Next的变量的值是多少?