黑马程序员技术交流社区

标题: b=a/(--a),第一个a的取值应该是多少? [打印本页]

作者: longshaocn    时间: 2014-9-7 16:36
标题: b=a/(--a),第一个a的取值应该是多少?
本帖最后由 longshaocn 于 2014-9-9 10:10 编辑
  1. int a=3,b;
  2. b = a/(--a);
  3. c = a/(a--);
复制代码


等号后面第一个a值应该是多少呢?是计算--a或者a--之后在将值赋给前面的a么?
作者: 沉默的和尚    时间: 2014-9-7 17:26
本帖最后由 沉默的和尚 于 2014-9-7 18:06 编辑

b=a/(--a);是先运算--a,再运算/;
  1. int a=3;
  2.             int x =a<<(--a);//说明第一个a的值是没有变的,但是--a的确是在<<前运行的。但是值没有赋予给a
  3.             int y =a<<(a--);//说明第a--是在<<后运行的
  4.             int z =3<<2;
  5.             System.out.println(x+"---"+y+"-----"+z);//12---8-----12
复制代码



作者: 她只是过客    时间: 2014-9-7 18:00
括号优先级是最高的
作者: longshaocn    时间: 2014-9-7 22:51
沉默的和尚 发表于 2014-9-7 17:26
b=a/(--a);是先运算--a,再运算/;

不过根据程序运行的结果看,后面自减之后,会将值重新赋值给第一个a。
作者: longshaocn    时间: 2014-9-7 22:53
她只是过客 发表于 2014-9-7 18:00
括号优先级是最高的

对,所以应该运算后会将自减后a的值,重新赋值给第一个a!
作者: 沉默的和尚    时间: 2014-9-8 00:21
longshaocn 发表于 2014-9-7 22:51
不过根据程序运行的结果看,后面自减之后,会将值重新赋值给第一个a。

大哥,你知不知道,3/2最后的结果是1,余数为1,所以显示出来的结果会是1

作者: 七年级生    时间: 2014-9-8 08:00
沉默的和尚 发表于 2014-9-8 00:21
大哥,你知不知道,3/2最后的结果是1,余数为1,所以显示出来的结果会是1
...

此楼正解。整数类型除后是没有小数的,也不会四舍五入
作者: longshaocn    时间: 2014-9-8 09:44
沉默的和尚 发表于 2014-9-8 00:21
大哥,你知不知道,3/2最后的结果是1,余数为1,所以显示出来的结果会是1
...

但是将/更换为%的时候,结果是0。。。。
  1. #include <stdio.h>

  2. int main(){
  3. int a=3,b;
  4. b = a%(--a);
  5. //c = a/(a--);
  6. printf("%d",b);
  7. return 0;
  8. }
复制代码

作者: 沉默的和尚    时间: 2014-9-8 10:53
longshaocn 发表于 2014-9-8 09:44
但是将/更换为%的时候,结果是0。。。。

额,那个我不知道你那个运算是什么情况,但是我这边把/改为%得到的结果是1.
作者: 沉默的和尚    时间: 2014-9-8 11:06
longshaocn 发表于 2014-9-8 09:44
但是将/更换为%的时候,结果是0。。。。

还有,你试试把a的值改为2,你就会发现/的结果是2,也就是2/1,如果按照你的那套来的话,结果不可能会是2,只会是1.
作者: longshaocn    时间: 2014-9-9 10:10
沉默的和尚 发表于 2014-9-8 11:06
还有,你试试把a的值改为2,你就会发现/的结果是2,也就是2/1,如果按照你的那套来的话,结果不可能会是2 ...

不纠结了,暂时把++  -- 常用的搞懂就行了!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2