java程序int b=c>>3_如下程序的结果 (要求(java)画图来解释) int a = 3, b; b = (a++)+(++a)+(a++)*2+a+(++a);...

如下程序的结果 (要求(java)画图来解释) int a = 3, b; b = (a++)+(++a)+(a++)*2+a+(++a);以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

5b33c2584840f23cf6f55e5cb45105b4.png

如下程序的结果 (要求(java)画图来解释) int a = 3, b; b = (a++)+(++a)+(a++)*2+a+(++a);

只要你记住++在前边,就是先把变量值+1之后再计算,把++放后边,就是先用变量当前的值计算,然后在把该变量值+1,这样你就应该可以很容易的计算出这个答案了.

b = (a++) +(++a)+(a++)*2+a+(++a)对应的是

b = (3++) 此时先把a的值赋给b,然后a+1,所以a=4,b=3,

b= 3+(++4) 此时a先计算自己到5,所以a=5,b=8

b=8+(5++)*2 此时先计算a*2=10+8,然后a+1,所以 a=6,b=18

b=18+6 ,此时a=b,b=24

b=24+(++6) 此时先把a+1,所以 a=7,b=31

求程序的输出结果 main() {int a,b; for(a=1,b=1;a<=10;a++) { if(b%3==1) {b+=3; continue;} b-=5;}}

最终 b=31.

循环开始,a 初值1,b 初值 1。

循环控制变量是 a,共循环 10 次。

第一次循环 b=1; b%3 得 1, if(b%3==1) 条件成立,做 b+=3, b 变 4 ,continue 则跳到下次循环开始,不执行 b-=5;

第二次循环 b=4; b%3 得 1,做 b+=3, b 变 7, continue 则跳到下次循环开始,

由于每次循环 b%3 == 1 条件都成立,所以 b 每次加3

循环 10 次, b 加3 共 10 次。

最终 b 为 1 + 3 * 10 得 31

以下程序的结果是( )。 int a=3,b=10; cout<>1);

13

int a=1; a=(a++)+(a++)+(a++);结果a=10;为啥? 换为b=(a++)+(a++)+(a++);b=3;又为啥?

未定义行为

详细的可查看CSDN C/C++论坛置顶帖或百度“C/C++ 语言中的表达式求值 裘宗燕”词条

int a=5,b;b=a++的结果以及b=--a的值

int a=5,b;

b=a++;

此时

b=5;

a=6;

原因:

b=a++;

相当于:

b=a;

a++;

++在变量后

先用值,再自增

int a=5,b;

b=--a;

此时

b=4;

b=4;

原因:

b=--a;

相当于

--a;

b=a;

--在前,所以先知减,再用自减后的值。

你只需要记住一点,++或者--在变量的前面,那就先把这个变量自增或者自减1,再使用这个改变后的值。在变量后面,就先用变量原值,再自增或者自减

int a=10, b;b=(a++)+a(++);输出a, b的结果?为什么?

b=(a++)+a(++);

应该是

b=(a++)+(a++);把?

a ==12 b==20 ,

b=(a++)+(a++) 等价于 b=a+a; a++;a++;

懂了吧? a++是先运算后++ 如果 改成 b=(++a)+(++a); 结果 b==24,a==12

设var a=2,b=3; 则a++==b?(a-1):b的结果是

a++==b?(a-1):b分解开为:

var result;var temp = a==b;a = a + 1;if(temp) { result = a - 1;}else{ result = b;}

所以,结果为3

结果是3

a++==b?(a-1):b 的意思是如果(a++)==b 那么返回a-1 否则返回b

此时a++要等到语句执行完后才会增一,因此(a++)==b 不成立,返回的应该是b的值

int a,b,x,y; a=5;b=5; x=(a++)+(a++)+(a++); y=(++b)+(++b)+(++b),输出的x=15,y=22.怎么解释啊?

a++ 叫后缀加加,后加加。在表达式里,先使用a的当前值5,

出了表达式,凡a要自增1的都要自增1。

所以 x=(a++)+(a++)+(a++);

分成:

x=a+a+a;

a=a+1;a=a+1;a=a+1;

得 x=15; 然后得 a=8;

========================

++b 是 前缀加加。在表达式里,b 要先增1,再使用。出了表达式,不再增1。

y=(++b)+(++b)+(++b);的计算要看编译器的处理方法

考虑编译优化,MS VC++ 6.0 优化选项 /O1 或 优化选项 /O2

处理成:

b=b+1;b=b+1;b=b+1; b变8

y=(++b)+(++b)+(++b) = b+b+b= 8+8+8 = 24.

优化选项 /Oa 或 /Od (不优化)

b=b+1; b1=6;

b=b+1; b=b+1; b2=8;

y = b1+b2+b2 = 6+8+8 = 22;

结果不同。

所以要避免y=(++b)+(++b)+(++b);这种多义性的写法。

=============

分页:

1

23

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值