You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言中j*=i==2与j=j*i==2行为差异的原因咨询

两段C代码行为差异的原因:运算符优先级与结合性

你的推测结果完全正确,两段代码的行为差异确实是由运算符优先级和结合性决定的,下面详细拆解执行逻辑:

关键运算符优先级(从高到低)

  • 乘法运算符 *(优先级12)
  • 相等性运算符 ==(优先级9)
  • 赋值运算符 =、复合赋值运算符 *=(优先级14,最低)

注:赋值类运算符(=、*=等)均为右结合,即从右往左解析表达式。


第一段代码执行逻辑

int i=2,j=3;
if (j*=i == 2){
    printf("yes, i= %d, j= %d",i,j);
} else {
    printf("no, i= %d, j= %d",i,j);
}
  1. 优先执行==运算:i == 2的结果为1(C语言中布尔真用int类型的1表示);
  2. 再执行复合赋值j *= 1,等价于j = j * 1,j原值为3,计算后仍为3;
  3. 整个表达式j*=i ==2的值为3(非0),if条件成立,输出:yes, i= 2, j= 3。

第二段代码执行逻辑

int i=2,j=3;
if (j=j*i == 2){
    printf("yes, i= %d, j= %d",i,j);
} else {
    printf("no, i= %d, j= %d",i,j);
}
  1. 优先执行*运算:j * i = 3 * 2 = 6;
  2. 再执行==运算:6 == 2的结果为0(布尔假用int类型的0表示);
  3. 最后执行赋值j = 0,整个表达式的值为0,if条件不成立,输出:no, i= 2, j= 0。

总结

两段代码的本质差异在于运算顺序:

  • j*=i ==2 中,==优先级高于*=,先比较再执行复合赋值;
  • j=j*i ==2 中,*优先级高于==,==又高于=,所以先做乘法、再做比较、最后执行赋值。

内容的提问来源于stack exchange,提问作者tariqalr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 10:37:24