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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 风不会停息 中级黑马   /  2016-7-6 11:20  /  7024 人查看  /  24 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

5黑马币
   int   i  = 0;
   int result = 1 | | i++ & & ++i;
&&优先级大于| |,=优先级最小,应该先执行i++& & ++i,由于i ++的值为0,在&&中后面的++i不进行计算,所以i得值变为1,再执行1 | |XXXX,
| |中,| |前为1,后面表达式不执行,但是后面&&中i的值改变了,最后的结果为什么是 i= 0,result =  1???

最佳答案

查看完整内容

这是一个逻辑短路-- 逻辑短路:当运算表达式里面有逻辑或和自增自减混合计算的时候,相当于忽略了优先级,从左往右开始运算 因为int result = 1 | | i++ & & ++i;中 先计算 1 || i++,因为 1 为真,所以后面的式子都不会计算,相当于1后面的式子其实并没有运算,所以i依旧等于0,应为 1 | | i++ & & ++i为1为真,所以result = 1; 望楼主采纳 ...

24 个回复

倒序浏览
这是一个逻辑短路-- 逻辑短路:当运算表达式里面有逻辑或和自增自减混合计算的时候,相当于忽略了优先级,从左往右开始运算
因为int result = 1 | | i++ & & ++i;中 先计算 1 || i++,因为 1 为真,所以后面的式子都不会计算,相当于1后面的式子其实并没有运算,所以i依旧等于0,应为 1 | | i++ & & ++i为1为真,所以result = 1;
望楼主采纳
回复 使用道具 举报
为什么这个在Java中运行不了!
回复 使用道具 举报
xxzz2427134693 发表于 2016-7-6 12:32
为什么这个在Java中运行不了!

而且int数据类型下,0,1代表不了ture,false,所以||和&&显得没有意义,至少在Java语言中根本执行不了

点评

C 语言是很自由的,一般认为在 C 语言中 0 代表 false,其他值代表 true  发表于 2016-7-8 15:45
回复 使用道具 举报
这是一个逻辑短路-- 逻辑短路:当运算表达式里面有逻辑或和自增自减混合计算的时候,相当于忽略了优先级,从左往右开始运算
因为int result = 1 | | i++ & & ++i;中 先计算 1 || i++,因为 1 为真,所以后面的式子都不会计算,相当于1后面的式子其实并没有运算,所以i依旧等于0,应为 1 | | i++ & & ++i为1为真,所以result = 1;
望楼主采纳
回复 使用道具 举报
18704635324 发表于 2016-7-6 18:29
这是一个逻辑短路-- 逻辑短路:当运算表达式里面有逻辑或和自增自减混合计算的时候,相当于忽略了优先级,从左 ...

认可。。。
回复 使用道具 举报
再说这个问题之前,首先应该明白的是运算符优先级的意义是什么?
运算符优先级的意义在于确定运算符与那些表达式结合,并没有确定求值的顺序
()的优先级最高,但是即使你把++i && ++i两端加上(),结果依然是一样的
也就是说1是与++i && ++i这个整体进行短路或运算,前边是1,则结果是1,后边的不在计算求值
  希望采纳!
回复 使用道具 举报

5黑马币,我就差你这点了,以后多了还给你,谢谢!
回复 使用道具 举报
莫莫莫 发表于 2016-7-7 01:28
再说这个问题之前,首先应该明白的是运算符优先级的意义是什么?
运算符优先级的意义在于确定运算符与那些 ...

认同这两位的观点,要弄清楚优先级和结合性的关系
回复 使用道具 举报
消失的LM 发表于 2016-7-7 13:02
认同这两位的观点,要弄清楚优先级和结合性的关系

唉!好难挣黑马币啊!,分不够,连测试的资格都没有
回复 使用道具 举报
莫莫莫 发表于 2016-7-7 13:16
唉!好难挣黑马币啊!,分不够,连测试的资格都没有

是啊,技术分真够狠
回复 使用道具 举报
消失的LM 发表于 2016-7-7 14:18
是啊,技术分真够狠

你怎么弄得,怎么签到两天就挣到那么多技术分了
回复 使用道具 举报
莫莫莫 发表于 2016-7-7 16:44
你怎么弄得,怎么签到两天就挣到那么多技术分了

柳柳桑老师最近发了一个加技术分的热帖,IOS基础测试的,五个单选题,但是现在已经停止回答了
回复 使用道具 举报
莫莫莫 发表于 2016-7-7 13:16
唉!好难挣黑马币啊!,分不够,连测试的资格都没有

多回答一些问题,把实在弄不懂的问题和大家交流,多签到就可以啦
回复 使用道具 举报
消失的LM 发表于 2016-7-7 18:17
多回答一些问题,把实在弄不懂的问题和大家交流,多签到就可以啦

恩恩,谢谢啦哈!
回复 使用道具 举报
int   i  = 0;
   int result = 1 | | i++ & & ++i;
解答:优先级&&高于||,所以在运算时就应该先运算&&

那么,步骤就演化为: int result = 1 | |  ( i++ & & ++i ); 由于 || 运算的规则是有一边成立结果就成立,题目中“||”左边是1成立,所以右边不用再去运算,所以,i值仍然是0,result值结果是1
回复 使用道具 举报
不想长大 来自手机 中级黑马 2016-7-8 20:20:57
17#
逻辑短路啊,最先执行i++,i++=0 ,i++&&++i就直接为假,不需要判断++i,导致逻辑短路,++i就不执行,所以就变成了1||0,最后结果resurt=1     ++i没有执行,所以i=1
回复 使用道具 举报
这个表达式写的有意义吗?关系运算符和算数运算符的结合?
回复 使用道具 举报
问付栋,它会告诉你..
回复 使用道具 举报
int   i  = 0;
   int result = 1 | | i++ & & ++i;
这个相当于 int result = 1 | |( i++ & & ++i);因为&&优先级高,所以可以用括号括起来来代表,然后在看这行代码,这时因为 || 前面是1,所以 || 后面的不予进行计算,所以最后的结果是i= 0,result =  1
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马