C++,程序设计,5>3&&8<4-!0,优先级,跪求,急急急急急急急急急急急急急

这是书本的例题,谭浩强的书本,就是要求执行的过程,按照优先级的顺序,排出执行的先后顺序,书本是这么说的:表达式自左至右求解,首先处理“5>3”(因为关系运算符由于逻辑运算符&&)。在关系运算符两侧的5和3作为数值参加运算....然后是!0,4-!0,8<4-!0“,可是我认为按照运算符的优先级,应该先执行!0,4-!0,8<4-!0,接着执行5>3,可是书本上为什么说”表达式自左至右求解,首先处理“5>3”“,这到底是什么意思啊,我的执行结果跟谭浩强的是一眼的,我的意思是,按照优先级的高低,应该在这个表达式中,首先执行!0,而不是课本的按照从左到右边的执行啊,其实,执行结果极其过程是明白的,就是对他的这句话很迷惑啊,谢谢高手帮助解释一下啊
但是,如果执行完5>3,难道执行5>3&&8????不对了啊

此表达式涉及的运算符优先级从高到低依次是:
!,—,(<,>),&&
程序在执行一个表达式的时候,会从左至右进行运算,这是一定的。在这个表达式里,程序首先读取到的是5>3,此时它不会计算5>3的结果,而是继续向右读取。程序发现5>3后面是&&运算,它的优先级没有>的优先级高,所以就将5>3计算出来,换成true&&8<4-!0。同样的,此时程序发现了&&号,但也不会计算true&&8的解果,也是要看后面的那个运算符的优先级,所以,它就会优先执行8<4,但程序不会简单的执行8<4,它还是要看一下4后面有没有比<优先级高的运算符,于是就发现了减号。由于减号的优先级高于<,它就会先执行这个减号所在的表达式。程序继续加载减号后面的第二个操作数,发现它又是一个表达式!0,所以它要先计算!0才能去计算4-!0,于是表达式就变成了true&&8<4-1,同理变成true&&8<3,接着是true&&false,得到结果false。追问

谢谢你啊,你可以加我吗,我合肥工大在校生,扣扣1725344108,谢谢啊

温馨提示:内容为网友见解,仅供参考
第1个回答  2011-04-27
我在VC++2008上编译测试了一下,这个表达式的结果是:0

我想应该顺序是这样的:
&& 级别最低,最后计算。先算它的两边。应该是先算右边:
5>3 是 1
然后再算左边:
8<4-!0 这个结果是0,因为 4-!0要先算,结果是3, 8<3结果是0

我认为,的确是5>3是先运算的,因为刚才我在程序中做了些测试,加入一个变量,分别放在左边和右边,确认了是&&左边先运算的。

所以最后是:1&&0,结果是0追问

老师加我扣扣啊1725344108,我合工大大二的,能跟你做朋友吗,怎么先算右边啊,你说的我糊涂啊,老师啊

追答

我这就加你。巧了,我也是合工大毕业的。呵呵。

第2个回答  2011-04-28
这个问题的关键出在&& 上 与操作 有一个为假即整个表达式就为假 所以根据表达式自左至右求解 先检验5>3是否为假 如果不是再检验8<4-!0是否为假。这种东西没必要深究它 以后自己写代码的话 弄不清优先级就用()括上 肯定是先执行括号里边的就是了
第3个回答  2011-04-27
在一般运行程序时都是从左至右,这是普片规定,在这题中你可以这么认为,如果换道题就不是了,最好养成从左至右分析题的习惯追问

谢谢,我合工大大一的,你能加我吗。扣扣1725344108

C++,程序设计,5>3&&8<4-!0,优先级,跪求,急急急急急急急急急急急急急...
在这个表达式里,程序首先读取到的是5>3,此时它不会计算5>3的结果,而是继续向右读取。程序发现5>3后面是&&运算,它的优先级没有>的优先级高,所以就将5>3计算出来,换成true&&8<4-!0。同样的,此时程序发现了&&号,但也不会计算true&&8的解果,也是要看后面的那个运算符的优先级,所以,它...

在c语言中5>3&&8<4-!0的值是多少?
5>3&&8<4-!0 =5>3&&<4-(!0)注意,0做逻辑非运算是,解释为逻辑假,!代表"非假",当然是逻辑真,C语言用1代表逻辑真,所以!的值就是1:=5>3&&8<4-1 =5>3&&8<(4-1)=5>3&&8<3 =(5>3)&&8<3 注意,5>3是成立的,逻辑值为真,结果是1:=1&&8<3 =1&&(8<3)注意,8...

在C语言中,表达式5>3&&2||8<4-!0的值为()。
1.A||B,若A为1,则不再计算B;返回1 2.A&&B ,若A为0,则不再计算B;返回0

c++中表达式5>4&&8<4-!0的值为多少?
按优先级计算:5>4&&8<4-!0 = 5>4&&8<4-1 = 5>4 && 8<3 = 1 && 0 = 0 值为0 ,即为false;

在C语言中,表达式5>3&&2||8<4-!0的值为()。
1)正常思路:由于逻辑运算符优先级别低于比较运算符同时这两种都低于算术运算符,因此先考虑后半部分,4-!0 真值为1, 而8<1的真值为0.再考虑或左边的表达式,5>3&&2显然真值为1最终结果为 1||0 当然结果为12) 有 || 将表达式分成两部分 左边的是 5>3&&2 显然其真值为1 因此 1 || ...

编一个程序计算表达式5>3&&2||8<4的值,并用输出语句把值输出
include <stdio.h> int main(){ printf("5>3&&2||8<4运算结果为:%d",5>3&&2||8<4);return 0;} 大于小于的优先级>与&&>或||,因此先计算5>3为真,结果为1;再计算1&&2,结果为真,再计算1||8<4,结果为1。

已知Y=5>3&&8<4-!0,则Y的值为
逻辑表达式,非0就是1. 'x'&&'y'两个字符与,非0。 x<=y,1。 x||y+z&&y-z →1+z&&y-z→1+1-z→-3,非0。 !((x0。所以选D

C语言:5>3&&2‖8<4-!5 要计算过程
运算优先级的问题,先算!再算+ - \/ 再算> < >= <= 再算&& || !5=0,然后4-0=4,然后5>3为真也就是1,8<4为1,1&&2=1,最后1||1=1 所以最后结果为1

5>3&&2||8《4的值是多少
是不是(5>3) && 2 || (8<<4)如果上面优先级对,那结果就是1&&2||0, 即1.

C++程序设计,成绩排序
\/\/以下打出前10个结点看看,若不需要则删除到return 0;之前 cout << " STUID\\tNAME\\tSCORE1\\tSCORE2\\tSCORE3\\tSCORE4\\tSCORE5\\tAVE\\n";cout << "===\\n";for(STU *p=hp;p!=hp+10;p=p->next){ cout << p->id << '\\t' << p->name << '\\t' << p->score[0] <...

相似回答
大家正在搜