无忧启动论坛

标题: 关于操作符“||“、“&&”和“!”的问题? [打印本页]

作者: my9823    时间: 2011-12-3 21:56
标题: 关于操作符“||“、“&&”和“!”的问题?
以下复制的版主的chm帮助文档:


command 1 && command 2 || command 3 ! command 4

command 1 返回 真,那么 command 2 将执行,command 2 返回 假,那么 command 3将执行;command 4不执行  

command 1 返回 假,那么 command 2、 command 3都将不执行,command 4 将被执行



如果command 1 为真,command 2也为真,command 4会执行吗?
还有如果1为假,2和3都不执行,4却执行?
这些操作符还有优先等级吗?
如果只有“||”和“&&”,就从左到右1、2、3、4、5……判断到最后吗?但是加了!有怎么判断那个优先?
作者: chenall    时间: 2011-12-3 22:10
只要前面有任意一个组合执行失败就会转到 ! 后面去执行。

比如
command1 && command2 || command 3 ! command 4

如果command1为假时因为后面是&&所以失败会执行command4

如果1真,2也真。因为2后面是||还是失败执行command4

如果1真,2假,执行COMMAND3,command4无用。
作者: hotdll    时间: 2011-12-3 22:29
标题: 回复 #1 my9823 的帖子
有个简单的规律
1、对于!命令,!命令前必须至少1个(包含1个)&&或者||命令。存在多个命令的时候,前面命令结果失败的时候执行。如果一句命令存在多个!命令,请分段!命令按上面的解释理解。
2、对于只有&&和||的命令,很好理解。顺序执行。后面的命令自行与否取决于当前命令的返回值是否满足&&或者||的执行条件。
3、&&和||接收其他命令的返回值。!不接受。
作者: my9823    时间: 2011-12-4 05:49
command x||command1 && command2 || command 3 ! command 4
是不是说如果command x真,后边就都不执行了;如果x真,1假后边是&&,2就不执行,后边呢?


对不起有点蒙了,看来我的语文学的不好,理解能力太差了!:D
作者: sratlf    时间: 2011-12-4 09:12
标题: 回复 #4 my9823 的帖子
X是真,执行4,结束

X是假,执行1
                     1是假,执行4,结束
                     1是真,执行2
                                                    2是真,执行4,结束
                                                    2是假,执行3,结束
作者: my9823    时间: 2011-12-4 10:40
谢谢版主、chenall、稀饭哥!
作者: 527104427    时间: 2011-12-4 11:55
做个记号,学到了新东西
作者: 讯极天度    时间: 2011-12-4 13:22
标题: 回复 #5 sratlf 的帖子
嗯 学习 讲解的很好!
作者: xianglang    时间: 2011-12-4 14:20
我一见到这样的复杂语句就头痛,越看越是糊涂——我现在想做一个USB-HDD和(ud)启动同用一个菜单项去实现从第一硬盘启动,都不知道怎么写(换句话说,如果检测到是0x23或0x80启动的话,就将硬盘(hd1)交换到(hd0))。
作者: 2011漂叶流水    时间: 2011-12-4 16:07
原帖由 sratlf 于 2011-12-4 09:12 发表
X是真,执行4,结束

X是假,执行1
                     1是假,执行4,结束
                     1是真,执行2
                                                    2是真,执行4,结束
            ...

收集资料,学习知识
作者: chenall    时间: 2011-12-4 16:14
只要自己试验一下,很容易明白的说。。

另外可以把它理解成是C语言 IF ... else 的语法。
只有一点区别我们的else是对应前面所有的判断的,只有其中一个返回假就执行,而正规的C语言是

&& 理解成 不等于零
||  理解成  等于零
! 理解成 else


像下面的就很好理解了

当command1返回值非零的时候执行command2否则执行command3
command1 && command2 ! command3

command1 &&  就是(command1 != 0)

if (command1!=0)
   command2
else
  command3

下面
command1 || command2 ! command3

command1 || 相当于 if (command1 == 0)
if (command1 == 0)
   command2
else
   command3

以上是基础解理了就可以看下面的。

复杂一点儿的
cmd1 && cmd2 && cmd3 ! cmd4

这样理解
if (cmd1 != 0)
  if (cmd2 != 0)
    cmd3
else
   cmd4


cmd1 && cmd2 || cmd3 ! cmd4

if (cmd1)
  if (!cmd2)
    cmd3
else
   cmd4

要点: 判断的依据是 命令和后面的符号。即判断命令执行的返回值是否为0。

懂得编程的应该都很容易理解。
如果还是不理解,建议放弃吧,不要用这个命令语法。
作者: 快雪时晴    时间: 2011-12-4 16:33
原帖由 chenall 于 2011-12-3 22:10 发表
只要前面有任意一个组合执行失败就会转到 ! 后面去执行。

比如
command1 && command2 || command 3 ! command 4

如果command1为假时因为后面是&&所以失败会执行command4

如果1真,2也真。因为2后面是||还是失败执行command4

如果1真,2假,执行COMMAND3,command4无用。


看了更糊涂,结合scralf的实例后,对于
command0 || command1 && command2 || command 3 ! command 4
只要command3没机会执行(不管结果),command4就执行就这么简单明了。
作者: chenall    时间: 2011-12-4 16:38
标题: 回复 #12 快雪时晴 的帖子
Q:只要command3没机会执行(不管结果),command4就执行就这么简单明了。
这个说法错误。

最简单的理解如下。
只要“!”前面其中一个命令得不到运行就会转到“!”后面去执行。

[ 本帖最后由 chenall 于 2011-12-4 21:48 编辑 ]
作者: hotdll    时间: 2011-12-4 17:16
原帖由 chenall 于 2011-12-4 16:38 发表
Q:只要command3没机会执行(不管结果),command4就执行就这么简单明了。
这个说法错误。

最简单的理解如下。
除了!前面的那个命令外,只要前面其中一个命令得不到运行就会转到!后面去执行。



还是写这个!命令的人最懂!
我们都是写很多简单的测试代码来掌握!命令的。
作者: xianglang    时间: 2011-12-5 04:39
原帖由 chenall 于 2011-12-4 16:38 发表
Q:只要command3没机会执行(不管结果),command4就执行就这么简单明了。
这个说法错误。

最简单的理解如下。
只要“!”前面其中一个命令得不到运行就会转到“!”后面去执行。


这次对“!”的用法,我看懂了………………

[ 本帖最后由 xianglang 于 2011-12-5 04:42 编辑 ]
作者: nytc006    时间: 2011-12-5 16:42
原帖由 sratlf 于 2011-12-4 09:12 发表
X是真,执行4,结束

X是假,执行1
                     1是假,执行4,结束
                     1是真,执行2
                                                    2是真,执行4,结束
            ...

这个最让人容易懂~~
作者: 2011hnfeng    时间: 2011-12-23 14:15
学习了,终于理解了 ! 的意思




欢迎光临 无忧启动论坛 (http://bbs.wuyou.net./) Powered by Discuz! X3.3