A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© longshaocn 中级黑马   /  2014-9-7 16:36  /  1991 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 longshaocn 于 2014-9-9 10:10 编辑
  1. int a=3,b;
  2. b = a/(--a);
  3. c = a/(a--);
复制代码


等号后面第一个a值应该是多少呢?是计算--a或者a--之后在将值赋给前面的a么?

10 个回复

倒序浏览
本帖最后由 沉默的和尚 于 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 17:26
b=a/(--a);是先运算--a,再运算/;

不过根据程序运行的结果看,后面自减之后,会将值重新赋值给第一个a。
回复 使用道具 举报
她只是过客 发表于 2014-9-7 18:00
括号优先级是最高的

对,所以应该运算后会将自减后a的值,重新赋值给第一个a!
回复 使用道具 举报
longshaocn 发表于 2014-9-7 22:51
不过根据程序运行的结果看,后面自减之后,会将值重新赋值给第一个a。

大哥,你知不知道,3/2最后的结果是1,余数为1,所以显示出来的结果会是1
回复 使用道具 举报 1 0
沉默的和尚 发表于 2014-9-8 00:21
大哥,你知不知道,3/2最后的结果是1,余数为1,所以显示出来的结果会是1
...

此楼正解。整数类型除后是没有小数的,也不会四舍五入
回复 使用道具 举报
沉默的和尚 发表于 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. }
复制代码
回复 使用道具 举报
longshaocn 发表于 2014-9-8 09:44
但是将/更换为%的时候,结果是0。。。。

额,那个我不知道你那个运算是什么情况,但是我这边把/改为%得到的结果是1.
回复 使用道具 举报
longshaocn 发表于 2014-9-8 09:44
但是将/更换为%的时候,结果是0。。。。

还有,你试试把a的值改为2,你就会发现/的结果是2,也就是2/1,如果按照你的那套来的话,结果不可能会是2,只会是1.
回复 使用道具 举报
沉默的和尚 发表于 2014-9-8 11:06
还有,你试试把a的值改为2,你就会发现/的结果是2,也就是2/1,如果按照你的那套来的话,结果不可能会是2 ...

不纠结了,暂时把++  -- 常用的搞懂就行了!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马