黑马程序员技术交流社区

标题: C语言中&&与| |的问题 [打印本页]

作者: 风不会停息    时间: 2016-7-6 11:20
标题: C语言中&&与| |的问题
   int   i  = 0;
   int result = 1 | | i++ & & ++i;
&&优先级大于| |,=优先级最小,应该先执行i++& & ++i,由于i ++的值为0,在&&中后面的++i不进行计算,所以i得值变为1,再执行1 | |XXXX,
| |中,| |前为1,后面表达式不执行,但是后面&&中i的值改变了,最后的结果为什么是 i= 0,result =  1???


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

而且int数据类型下,0,1代表不了ture,false,所以||和&&显得没有意义,至少在Java语言中根本执行不了
作者: 18704635324    时间: 2016-7-6 18:29
这是一个逻辑短路-- 逻辑短路:当运算表达式里面有逻辑或和自增自减混合计算的时候,相当于忽略了优先级,从左往右开始运算
因为int result = 1 | | i++ & & ++i;中 先计算 1 || i++,因为 1 为真,所以后面的式子都不会计算,相当于1后面的式子其实并没有运算,所以i依旧等于0,应为 1 | | i++ & & ++i为1为真,所以result = 1;
望楼主采纳
作者: Ake丶    时间: 2016-7-6 20:08
18704635324 发表于 2016-7-6 18:29
这是一个逻辑短路-- 逻辑短路:当运算表达式里面有逻辑或和自增自减混合计算的时候,相当于忽略了优先级,从左 ...

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

5黑马币,我就差你这点了,以后多了还给你,谢谢!

作者: 消失的LM    时间: 2016-7-7 13:02
莫莫莫 发表于 2016-7-7 01:28
再说这个问题之前,首先应该明白的是运算符优先级的意义是什么?
运算符优先级的意义在于确定运算符与那些 ...

认同这两位的观点,要弄清楚优先级和结合性的关系
作者: 莫莫莫    时间: 2016-7-7 13:16
消失的LM 发表于 2016-7-7 13:02
认同这两位的观点,要弄清楚优先级和结合性的关系

唉!好难挣黑马币啊!,分不够,连测试的资格都没有
作者: 消失的LM    时间: 2016-7-7 14:18
莫莫莫 发表于 2016-7-7 13:16
唉!好难挣黑马币啊!,分不够,连测试的资格都没有

是啊,技术分真够狠
作者: 莫莫莫    时间: 2016-7-7 16:44
消失的LM 发表于 2016-7-7 14:18
是啊,技术分真够狠

你怎么弄得,怎么签到两天就挣到那么多技术分了
作者: 消失的LM    时间: 2016-7-7 18:02
莫莫莫 发表于 2016-7-7 16:44
你怎么弄得,怎么签到两天就挣到那么多技术分了

柳柳桑老师最近发了一个加技术分的热帖,IOS基础测试的,五个单选题,但是现在已经停止回答了
作者: 消失的LM    时间: 2016-7-7 18:17
莫莫莫 发表于 2016-7-7 13:16
唉!好难挣黑马币啊!,分不够,连测试的资格都没有

多回答一些问题,把实在弄不懂的问题和大家交流,多签到就可以啦
作者: 莫莫莫    时间: 2016-7-7 18:25
消失的LM 发表于 2016-7-7 18:17
多回答一些问题,把实在弄不懂的问题和大家交流,多签到就可以啦

恩恩,谢谢啦哈!
作者: 1130488283    时间: 2016-7-8 00:17
int   i  = 0;
   int result = 1 | | i++ & & ++i;
解答:优先级&&高于||,所以在运算时就应该先运算&&

那么,步骤就演化为: int result = 1 | |  ( i++ & & ++i ); 由于 || 运算的规则是有一边成立结果就成立,题目中“||”左边是1成立,所以右边不用再去运算,所以,i值仍然是0,result值结果是1

作者: 不想长大    时间: 2016-7-8 20:20
逻辑短路啊,最先执行i++,i++=0 ,i++&&++i就直接为假,不需要判断++i,导致逻辑短路,++i就不执行,所以就变成了1||0,最后结果resurt=1     ++i没有执行,所以i=1
作者: New灬狼    时间: 2016-7-8 23:21
这个表达式写的有意义吗?关系运算符和算数运算符的结合?
作者: weather    时间: 2016-7-9 03:36
问付栋,它会告诉你..
作者: ActiveFaceLife    时间: 2016-7-9 18:27
int   i  = 0;
   int result = 1 | | i++ & & ++i;
这个相当于 int result = 1 | |( i++ & & ++i);因为&&优先级高,所以可以用括号括起来来代表,然后在看这行代码,这时因为 || 前面是1,所以 || 后面的不予进行计算,所以最后的结果是i= 0,result =  1

作者: ActiveFaceLife    时间: 2016-7-9 18:28
int   i  = 0;
   int result = 1 | | i++ & & ++i;
这个相当于 int result = 1 | |( i++ & & ++i);因为&&优先级高,所以可以用括号括起来来代表,然后在看这行代码,这时因为 || 前面是1,所以 || 后面的不予进行计算,所以最后的结果是i= 0,result =  1  
  
作者: 风不会停息    时间: 2016-7-9 23:18
感谢答题,最佳已经给了最先答题的朋友了~
作者: 15620606706    时间: 2016-7-14 01:09
int result = 1 | | i++ & & ++i先计算 1 || i++为 1 为真,后面的不会计算,后面的式子没有运算,i依旧等于0,result = 1;
作者: 15620606706    时间: 2016-7-14 01:11
int result = 1 | | i++ & & ++i 先计算 1 || i++为 1 为真,后面不计算,后面没有运算,i等于0, 1 | | i++ & & ++i为真,result = 1;




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