首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于C的逻辑运算符,该怎么解决

2012-11-09 
关于C的逻辑运算符请高手门指点一下,以下是一道习题里面的作业,运算出来的结果看不明白(1)int inum1,inum2

关于C的逻辑运算符
请高手门指点一下,以下是一道习题里面的作业,运算出来的结果看不明白
(1)int inum1,inum2,inum3
  inum2=(inum1=10,inum1+5,inum3=10)
  printf("inum1=%d,inum2=%d,inum3=%d\n",inum1,inum2,inum3);
结果:inum1=10,inum2=10,inum3=10

(2)int inum=2;
  inum*=inum+=inum++;
  printf("inum=%d\n",inum);
结果:inum=25

(3)int inum1,inum2,inum3;
  inum1=inum2=inum3=-1;
  ++inum1&&++inum2||++inum3;
  printf("inum1=%d\tinum2=%d\tinum3=%d\n",inum1,inum2,inum3);
结果:inum1=0,inum2=-1,inum3=-1
  inum1=inum2=inum3=-1;
  ++inum1||++inum2&&++inum3;
  printf("inum1=%d\tinum2=%d\tinum3=%d\n",inum1,inum2,inum3);
结果:inum1=0,inum2=0,inum3=0

  inum1=inum2=inum3=-1;
  ++inum1&&++inum2&&++inum3;
  printf("inum1=%d\tinum2=%d\tinum3=%d\n",inum1,inum2,inum3);
结果:inum1=0,inum2=-1,inum3=-1

还请高手们写个运算步骤,本人还是菜鸟,什么都不会,呵呵,在这里先谢谢了~ ~!


[解决办法]
这个~ 百度一下优先级吧~ 
我想没多少人会去纠结那些符号的优先级
[解决办法]
第一个是逗号运算符。。自己去找
第二个num先+2,然后num自增,然后num*num

[解决办法]
优先级的问题,可以用括弧改变。。。所以写逻辑运算的时候最好用括号。。这样逻辑清晰
[解决办法]
[code=C/C++]
int inum1,inum2,inum3 ;//话说这里少了分号
inum2=(inum1=10,inum1+5,inum3=10) ;//这里也是少了
printf( "inum1=%d,inum2=%d,inum3=%d\n ",inum1,inum2,inum3);

[/code]

inum2的那个赋值,括号里的是逗号运算符,表达式都会执行,但是结果取最后一个。

基本都是优先级的问题,给你个百科链接
http://baike.baidu.com/view/1516130.htm
[解决办法]
(1)inum2=(inum1=10,inum1+5,inum3=10)
括号优先:首先iunm=10;然后iunm+5,这个没意义,iunm1还是=10;然后iunm3=10;最后括号里的完了,外面的iunm2=iunm1=10,iunm3=10,逗号只是用来粘帖,表示从左到右的表达式,完。。
结果:inum1=10,inum2=10,inum3=10
************************************
(2)int inum=2;
inum*=inum+=inum++;
首先优先等级问题,加括号看吧:iunm*=(iunm+=(iunm++));括号先,iunm++的结果还是2,接着iunm+=2,此时这个iunm变成3了,就是iunm+=2,等于5,iunm=5;最后iunm*=5,此刻iunm=5,就是iunm*=5,等于25,完。
结果:inum=25


[解决办法]
为什么这么纠结??
[解决办法]
第三个,汗
(3) inum1=inum2=inum3=-1;
++inum1&&++inum2||++inum3;
首先inum1=inum2=inum3=-1,结果它们三个的值都是-1;接着++inum1&&++inum2||++inum3,++inum1的结果是++(-1),就是0了! &&逻辑符只要有一个是假,后面都不执行了,就是说inum2没机会++了,inum2还是 -1;接着inum2&&inum3,-1是非零,||逻辑符只要前面一个是真的,后面的也不会执行了,直接OK,所以inum2和inum3还是=-1,完。
结果:inum1=0,inum2=-1,inum3=-1
*************************************
inum1=inum2=inum3=-1;
++inum1||++inum2&&++inum3;
同理啊桶里:
结果:inum1=0,inum2=0,inum3=0
*************************************
inum1=inum2=inum3=-1;
++inum1&&++inum2&&++inum3;
 也是桶里同理:
结果:inum1=0,inum2=-1,inum3=-1
**************************************
[解决办法]
不同优先级,就查看课本啊,毕竟 我们没有必要去记住它们。

还有一个 逗号表达式,明白了,就懂了。
[解决办法]
如果不能确定优先级的时候,用括号()解决所有问题。
[解决办法]
第一个是逗号表达式,所以inum2=最后一个表达式的值=10;其他的就是直接赋值的
第二个是括号先,iunm++表达式结果还是2,然后iunm自增变成3了,就是iunm+=2,iunm=5;最后iunm*=5,等于25。
第三个都是一样的原理了,&&在判断时候只要出现了0,后面就不判断了,而||只要出现了1,后面就不判断了。所以后面的表达式就没有执行了,值就不会发生改变




[解决办法]
inum*=inum+=inum++;
 优先级相同,看结合率(从左到右), 

++inum1&&++inum2||++inum3;
C 语言中三个有确定计算顺序的二元运算符(另一个是 ?)
[解决办法]
sorry

inum*=inum+=inum++;
 优先级相同,看结合率(从右到左),

[解决办法]
符号的优先级……
[解决办法]
楼主多看教材!!!!!!!!!!!!!!!!
[解决办法]
不要迷信书、考题、老师、回帖;
要迷信CPU、编译器、调试器、运行结果。

不要写连自己也预测不了结果的代码!

[解决办法]

探讨
++inum1||++inum2&&++inum3
++inum1||++inum2运行++inum1得inum1=0,再运行++inum2得inum2=0;++inum2&&++inum3何解?
就是这个还不明白,大侠们,我是不钻牛角了?!

[解决办法]
1)int inum1,inum2,inum3
inum2=(inum1=10,inum1+5,inum3=10)/*逗号表达式有(),优先级高,先执行,所以有inum1==10,inum3==10,
逗号表达式的结果为10,最后把逗号表达式的值10赋给inum2即,inum2==10*/
printf("inum1=%d,inum2=%d,inum3=%d\n",inum1,inum2,inum3);
结果:inum1=10,inum2=10,inum3=10

(2)int inum=2;
inum *= inum += inum++;/*等价于inum *= (inum += 2),而此时因自增,inum变成了3,
==》 inum *= 5 ==> inum = 5 * 5 即inum == 25 */
printf("inum=%d\n",inum);
结果:inum=25

(3)int inum1,inum2,inum3;
inum1=inum2=inum3=-1;
++inum1 && ++inum2 || ++inum3; /* 等价于(++inum1) && (++inum2 || ++inum3 ),括号中先执行++inum1后,值为0,由于
对于&&运算符而言,左边如果为假,即为0时,右边就不执行,所以括号中 右边括号中表达式不执行,左括号的结果为0
所以inum1 == 0 ,而inum2 和inum3 仍然为原来的值,即-1
printf("inum1=%d\tinum2=%d\tinum3=%d\n",inum1,inum2,inum3);
结果:inum1=0,inum2=-1,inum3=-1

inum1=inum2=inum3=-1;
++inum1||++inum2&&++inum3; // 等价于((++inum1) || (++inum2) ) && (++inum3)
//先计算表达式左边的,所以inum1和inum2都变成了0 , 由
//于左边为假,对于&&而言,右边仍然执行,所以inum3也为0
printf("inum1=%d\tinum2=%d\tinum3=%d\n",inum1,inum2,inum3);
结果:inum1=0,inum2=0,inum3=0

inum1=inum2=inum3=-1;
++inum1&&++inum2&&++inum3; // 等价于((++inum1) && (++inum2 )) && (++inum3) 结合性为自左向右,所以先执行 表达式 ++inum1, 表达式的值为0,inum1==0
// 再执行 ++inum2 ,表达式的值为0, inum2==0,左边运算完毕,为0, 所以右边的表达式也执行 , 最终inum3==0
printf("inum1=%d\tinum2=%d\tinum3=%d\n",inum1,inum2,inum3);



解释完毕,如有错请指出,谢谢

热点排行