我爱橙 发表于 2022-2-25 09:35:41

NO.149三目 >计算题

本帖最后由 我爱橙 于 2022-2-25 10:31 编辑

#include <stdio.h>
#include <math.h>
int main()
{
      int a=7,b=9,t;
      
      t=a*=a>b?a:b;
      
      printf("%d\n",t);
         
      return 0;
}

为什么结果是63?

>优先级高,
先判断7<9结果为假0,
a=a*0=0,
再把0赋值给t

isdkz 发表于 2022-2-25 09:39:03

本帖最后由 isdkz 于 2022-2-25 10:01 编辑

t=a*=a>b?a:b;
拆开就是
a>b?a:b因为a小于b所以结果是b,
a*=a>b?a:b就变成了a*=b,结果是63,然后赋值给t,
右边的三元表达式是整体的,你不要光看a>b

ck9999kkoo 发表于 2022-2-25 09:47:29

#include <stdio.h>
#include <math.h>
int main()
{
        int a = 7, b = 9, t;

        t = a *( a>b ? a : b);

        printf("%d\n", t);

        return 0;
}

写成这样不是更容易让人理解吗?

我爱橙 发表于 2022-2-25 09:58:33

isdkz 发表于 2022-2-25 09:39
t=a*=a>b?a:b;
拆开就是
a>b?a:b因为a大于b所以结果是b,


1.顺序是这样吗?
t=(a*=((a>b)?a:b));

2.a=7,b=9
a<b啊

3.<结果不是为1或者0吗

isdkz 发表于 2022-2-25 10:04:18

我爱橙 发表于 2022-2-25 09:58
1.顺序是这样吗?
t=(a*=((a>b)?a:b));



1.顺序是这样的,三元表达式是一个整体
t=(a*=(a>b?a:b));

2.确实是 a小于b,我刚刚写错了,三元表达式不满足条件时,值为右边的值,所以得出 b

3.三元表达式是整体的,你现在不能拿它来当条件表达式看
页: [1]
查看完整版本: NO.149三目 >计算题