已知a=1,b=2,c=3,则表达式a*b&&(b++,!c)&&(a++,c++)的值是。该表达式运算过后,a=? ,b=? ,c=?

来自:喜看    更新日期:早些时候
假定变量a=1,b=2,c=3,则表达式:c==b++>a&&a++,a+b的值 求详解~

由运算符优先级可知
原表达式等效于
(c==(b++>a))&&a++,a+b

又由&&运算符的短路效应可知子表达式(c==(b++>a))&&a++中,&&右侧的a++未被执行

又由逗号运算符是顺序点这一点,此间所有副作用均会发生,所以只有b值自增了一

所以整个逗号表达式的值为4(a+b==1+3)


看结果就知道了 执行了第一个括号之后就返回了 后面的括号没有执行
第一个括号最后一个值是!c c逻辑取反运算 c是3 取反后是0 然后逗号表达式返回最后一个值 返回了0 前面的&&遇到0就直接返回结果了

首先得知道&&进行的是短路运算,如果运算符的左边经计算后结果为假,则不会再计算右边。
因a*b=2为真,接着计算(b++,!c),而(b++,!c)是一个逗号表达式,逗号表达式按从左往右计算,整个表达式的结果为最右边那个表达式的结果。所以,(b++,!c)经计算后为(2,0),逗号表达式的值是0,同时b为3,而a*b&&(b++,!c)&&(a++,c++)=2&&0&&(a++,c++)已为假,不会再计算(a++,c++),因此,结果是表达式a*b&&(b++,!c)&&(a++,c++)的值是0,该表达式运算过后,a=1,b=3,c=3。

该表达式运算过后,a=1 ,b=3 ,c=3
因为 1*2的值非0,被认为是“真”
&&后面继续计算:b++,!c
是一个逗号表达式,b变成了3,!c的值为0(因为c原值为非0,即“真”,取反后即为“假”),所以逗号表达式的值为“假”。
整个表达式的值已经确定,为“假”,后面总分不再运算。
所以,a=1 ,b=3 ,c=3

看结果就知道了 执行了第一个括号之后就返回了 后面的括号没有执行

第一个括号最后一个值是!c c逻辑取反运算 c是3 取反后是0 然后逗号表达式返回最后一个值 返回了0  前面的&&遇到0就直接返回结果了



根据运算符的优先级,表达式等价于
(++a) || (-b) && (++c)
在C/C++中 0为false,非0就是true,上面的表达式就等于
true || true && true
所以最终的值就是true,如果按照整数输出,则为1


已知a=1,b=2,c=3,则表达式a*b&&(b++,!c)&&(a++,c++)的值是。该表达式运算过后,a=? ,b=? ,c=?视频

相关评论:
  • 19480123759设有int a=1,b=2,c=3,d=4,m=2,n=2;执行(m=a>b)&&(n=c>b)之
    经会耐(m=a>b) 是赋值表达式,若 a 大于 b 则 m 得真,否则m得假。 a=1,b=2, a>b 为假,故 m=假。赋值表达式(m=a>b)为假。m=0.(m=a>b)&&(n=c>b) 是 2个 赋值表达式 的 ”逻辑与“ 计算,当前面(m=a>b)为假时,{(m=a>b)&&(n=c>b) } 必得假, ...

  • 19480123759当a=1,b=2,c=3时,以下if语句执行后,a 、b、 c 中的值分别为()()()
    经会耐;”就结束了。后两句是各自独立的。首先a>c这个不成立,所以 b=a这个就不会被操作,而是自动跳过去。然后a=c;是将c的值赋予a,也就是此时a=3,c的值不被改变。然后c=b;是将b的值赋予c,也就是此时c=2,b的值不被改变。所以最终结果是c=3,b=2,c=2.不知道这么说你能理解不。

  • 19480123759C语言中int a=1,b=2,c=3; c=(a+=a+2),(a=b,b+3); printf
    经会耐3+5,6+8 称为逗号表达式,又称为“顺序求值运算符”。逗号表达式的一般形式为 表达式1,表达式2 逗号表达式的求解过程是:先求解表达式1,再求解表达式2。整个逗号表达式的值是表达式2的值。例如,上面的逗号表达式“3+5,6+8”的值为14。又如,逗号表达式 a=3*5,a*4 对此表达式的求解,读者...

  • 19480123759如果int a=1,b=2,c=3,d=4;则条件表达式a<b?a:c<d?c:d的值为?
    经会耐a<b 如果是正确的就得值就是a的值 如果不正确就是c的值 因为1《2 所以这步的值得出来是a的值 即1 然后 比较这步得出来的值 即A和D比较 正确A<B即得c值 不正确则是D值 因为1《4 所以得c值即3 a<b?a:c 即判断a<b是否成立 成立则为a值 不成立则为c值 ...

  • 19480123759int a=1,b=2,c=3;执行语句a+=b*=c;后a的值是?
    经会耐在c语言中,赋值运算符代表把右边的确定值赋予给左边的变量,从右往左计算;复合运算表示的意思是将左边的变量与右边的确定值进行对应的符号的运算后,重新赋值给左边的变量,所以上式a+=b*=c表示先计算b*c然后赋值给b,得到b=6,然后计算a+=6,表示a=a+6=1+6=7,所以最后a的值为7。

  • 19480123759int a=1,b=2,c=3,执行语句a=b=c后,a的值是多少
    经会耐3a=b=c会把a和b的指针指向c所指向的内存区域,即3执行完a=b=c以后a=3 b=3 c=3

  • 19480123759若有定义:int a=1,b=2,c=3;语句++a||++b&&++a运行后b 的值为...
    经会耐答案是2,不是3 ++a||++b&&++a 按照运算符优先级,等价于:++a||(++b&&++a)因为++a的值为2,为真,所以整个表达式的值为真,||右边的表达式不再运算,即逻辑或短路,所以b的值还是原来的值,即2

  • 19480123759已知a,b,c两两垂直,向量|a|=1,|b|=2,|c|=3,求r=a+b+c的长和它与a,b...
    经会耐已知a,b,c两两垂直,向量|a|=1,|b|=2,|c|=3,求r=a+b+c的长和它与a,b,c的夹角  我来答 1个回答 #热议# 职场上受委屈要不要为自己解释?数学与计算机编程 2016-10-14 · TA获得超过2070个赞 知道大有可为答主 回答量:2307 采纳率:80% 帮助的人:349万 我也去答题访问个人页 ...

  • 19480123759int a=1,b=2,c=3,d=4; if((a=2)&&(b=1)) c=2; if((c==3)||(d=-1...
    经会耐答案是 5 1 2 -1 首先,if((a=2)&&(b=1)) c=2;a=2这是赋值语句,不是比较语句,成功赋值,表达式为真,b=1同理,所以if为真,执行c=2 此时,a=2,b=1,c=2 然后,if((c==3)||d=-1) a=5;c值为2,c!=3,执行d=-1,if为真,执行a=5 此时a=5,b=1,c=2,d=-1 ...

  • 19480123759int a=1,b=2,c=3; printf("%d,%d,%d,%d\\n",a=b=c,a=b==c,a==(b=c...
    经会耐1 printf从右向左计算传入的参数 2 倒数第二个参数 a==(b=c),运行完后,b的值变成3 3 倒数第三个参数 a=b==c 运行完后,由于b c相等,a的值变成1 由于这个参数是一个赋值语句,printf等到全部参数运算结束后,直接从变量a取值 4 倒数第四个参数 a=b=c 运行完后,a的值更新为3 由于...

  • 相关主题精彩

    版权声明:本网站为非赢利性站点,内容来自于网络投稿和网络,若有相关事宜,请联系管理员

    Copyright © 喜物网