求大神指点C语言1||0&&0是1因为断路,但是0&&1||1为什么也是1,不会...
发布网友
发布时间:2024-10-22 06:27
我来回答
共2个回答
热心网友
时间:2024-11-19 05:34
1||0&&0——因为&&的优先级比||高,所以1||0&&0等效为1||(0&&0),由于1已经为真,确定了整个表达式的值为1,所以||右边没有必要计算了(俗称‘短路’了)。
0&&1||1——同样因为&&的优先级比||高,所以0&&1||1被等效为(0&&1)||1,由于()中的结果是假,后面又是||,所以整个表达式的值并没有确定(||两边任意一边为1则为1),所以还要计算||右边的表达式。
这个所谓“短路”问题使很多初学者纠结。不能硬背啊,要看分表达式能否确定整个表达式的值,能确定就被“短路”了,否则就不能被短路。比如把0&&1||1这个表达改成1&&1||1,由于1&&1已经为真,||右边是真是假都左右不了整个表达式为1的事实了,所以表达式就被||“短路”了。
热心网友
时间:2024-11-19 05:40
优先级是在短路之上的呀。&&比||优先级高。
1||0&&0就是1||(0&&0),嗯1||什么都是1,所以就是1,()里的什么东西都不用算了。
0&&1||1是(0&&1)||1,前面0&&1是0,0||什么,还得算后面的,然后就是0||1结果是1。
--------------------------------------------------------------------------------------
热心网友
时间:2024-11-19 05:38
1||0&&0——因为&&的优先级比||高,所以1||0&&0等效为1||(0&&0),由于1已经为真,确定了整个表达式的值为1,所以||右边没有必要计算了(俗称‘短路’了)。
0&&1||1——同样因为&&的优先级比||高,所以0&&1||1被等效为(0&&1)||1,由于()中的结果是假,后面又是||,所以整个表达式的值并没有确定(||两边任意一边为1则为1),所以还要计算||右边的表达式。
这个所谓“短路”问题使很多初学者纠结。不能硬背啊,要看分表达式能否确定整个表达式的值,能确定就被“短路”了,否则就不能被短路。比如把0&&1||1这个表达改成1&&1||1,由于1&&1已经为真,||右边是真是假都左右不了整个表达式为1的事实了,所以表达式就被||“短路”了。
热心网友
时间:2024-11-19 05:35
优先级是在短路之上的呀。&&比||优先级高。
1||0&&0就是1||(0&&0),嗯1||什么都是1,所以就是1,()里的什么东西都不用算了。
0&&1||1是(0&&1)||1,前面0&&1是0,0||什么,还得算后面的,然后就是0||1结果是1。
--------------------------------------------------------------------------------------