关于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、编译器、调试器、运行结果。
不要写连自己也预测不了结果的代码!
[解决办法]