本帖最后由 番杰 于 2021-11-17 13:37 编辑
不对,首先你需要清楚 “ && ”与 “ == ”的运算优先级,
我没记错的话应该是后者高于前者,
所以你这个表达式的逻辑就是:
(y % 4 + y % 100 )&&( y % 400 == 0)
就相当于先算(y % 4 + y % 100 ),在判断( y % 400 == 0),最后取&&
1.先说:(y % 4 + y % 100 )
只要这个Y不为4和100的公倍数,那么这个结果肯定是大于等于1的,即逻辑真。
换而言之,y为4和100的公倍数,那么结果就为0,即逻辑假。
2.再说:( y % 400 == 0)
只要y是400的倍数,那么该表达式就为逻辑真。
3.整体来看:(y % 4 + y % 100 )&&( y % 400 == 0)
结合1和2所述,y只有两种取值方法。
1)y为4和100的公倍数(同样可以看成是400的倍数)
那么,(y % 4 + y % 100 )的结果为0,根据&&短路判断法(好像是这个名字),不用进行( y % 400 == 0)的判断,
即可得出该表达式的结果为假、
2)y不为4和100的公倍数(同样可以看成不是400的倍数)
那么,(y % 4 + y % 100 )的结果为大于等于1的数值,即逻辑真。
( y % 400 == 0)的结果,为假。
真 && 假,为假。
即可得出该表达式的结果为假、
所以综上所述,无论y取什么值,你的表达式的结果都为假。