搜索
查看: 12366|回复: 36

考考你 逻辑操作符

    [复制链接]

56

主题

475

帖子

3807

积分

荣誉会员

Rank: 8Rank: 8

积分
3807
发表于 2011-8-12 16:52:38 | 显示全部楼层 |阅读模式

io.open()
i=1
b=i ? 0 : 1 ? 0 : 1 ? 2
c=i ? 0: 1
io.print(b,c) // b,c  是多少  为什么

c=i ? 0: 1
i ? 0 =0
0 : 1 =1
所以 c=1

判断类型不会因为 成立第一而不继续判断下去,它是一直判断到最后

b 一样全部按照表达式继续看 下去 得 2
回复

使用道具 举报

40

主题

565

帖子

3044

积分

五级会员

超级初学者

Rank: 8Rank: 8

积分
3044
发表于 2011-8-12 18:01:57 | 显示全部楼层

b2 c1

b2   c1
回复

使用道具 举报

40

主题

565

帖子

3044

积分

五级会员

超级初学者

Rank: 8Rank: 8

积分
3044
发表于 2011-8-12 18:04:11 | 显示全部楼层

[i=s] 本帖最后由 fantasynew 于 2011-8-12 18:12 编辑 [/i] 不记得?:分别代表哪种逻辑运算,平时都是用and、or。

本帖最后由 fantasynew 于 2011-8-12 18:12 编辑

不记得?:分别代表哪种逻辑运算,平时都是用and、or。
我是歪打正着的,因为记错了运算符。
使用逻辑操作符构建a?b:c的三元表达式时,如果a为真但是b为false,返回的是c的原值, 这一点与C++的三元操作符略有区别。

http://echong.taobao.com 各类话费充值,请多支持!
回复

使用道具 举报

4

主题

15

帖子

126

积分

一级会员

Rank: 2

积分
126
发表于 2011-8-13 14:11:57 | 显示全部楼层

不太明白,求解

不太明白,求解
回复

使用道具 举报

51

主题

266

帖子

1553

积分

四级会员

Rank: 6Rank: 6

积分
1553
发表于 2011-8-13 17:12:00 | 显示全部楼层

[i=s] 本帖最后由 o00viw 于 2011-8-13 17:13 编辑 [/i] b2 c0 一不小心弄错了C。{:soso_e115:}

本帖最后由 o00viw 于 2011-8-13 17:13 编辑

b2 c0

一不小心弄错了C。{:soso_e115:}
回复

使用道具 举报

0

主题

7

帖子

50

积分

一级会员

Rank: 2

积分
50
发表于 2011-8-24 21:42:56 | 显示全部楼层

看看。。。。。。

看看。。。。。。
回复

使用道具 举报

2

主题

10

帖子

68

积分

一级会员

Rank: 2

积分
68
发表于 2011-8-26 06:55:56 | 显示全部楼层

b=1 c=1

b=1            
c=1               
回复

使用道具 举报

16

主题

101

帖子

633

积分

三级会员

Rank: 4

积分
633
发表于 2011-8-26 08:12:57 | 显示全部楼层

b 0 c 0{:P}

b 0
c 0
回复

使用道具 举报

5

主题

18

帖子

99

积分

一级会员

Rank: 2

积分
99
发表于 2011-8-26 15:29:43 | 显示全部楼层

b2 c1

b2   c1




回复

使用道具 举报

52

主题

1341

帖子

7331

积分

荣誉会员

Rank: 8Rank: 8

积分
7331
发表于 2011-9-8 01:12:01 | 显示全部楼层

我发现 这个[quote] b=i ? 0 : 1 ? 0 : 1 ? 2[/quote] 是最难理解的,谁可以帮忙解释一下?

我发现 这个
b=i ? 0 : 1 ? 0 : 1 ? 2
是最难理解的,谁可以帮忙解释一下?
回复

使用道具 举报

13

主题

55

帖子

510

积分

培训班

积分
510
发表于 2011-9-8 08:16:59 | 显示全部楼层

[quote][size=2][color=#999999]qqmmcc 发表于 2011-9-8 01:12[/color] [url=forum.php?m

qqmmcc 发表于 2011-9-8 01:12
我发现 这个 是最难理解的,谁可以帮忙解释一下?

b=1? 0 : 1 ? 0 : 1 ? 2
? 为逻辑与 :为逻辑或

逻辑与或运算是二进制运算,所以2应该表示为10

逻辑与中,只有左右逻辑值均为1时结果为1,其余为0
逻辑或中,只有左右逻辑值均为0时结果为0,其余为1

根据上面的关系,第二个逻辑或之前的可忽略不计,可写成b=1?10=10
结果就等于十进制2了
回复

使用道具 举报

52

主题

1341

帖子

7331

积分

荣誉会员

Rank: 8Rank: 8

积分
7331
发表于 2011-9-8 16:59:02 | 显示全部楼层

[i=s] 本帖最后由 qqmmcc 于 2011-9-8 17:34 编辑 [/i] 谢谢bob帮忙解释,我再补充一些资料,加深认识~ [b]? ——

本帖最后由 qqmmcc 于 2011-9-8 17:34 编辑

谢谢bob帮忙解释,我再补充一些资料,加深认识~

? —— 表示逻辑与(&&、and)
逻辑与要求两个操作数取布尔值后都为true,如果第一个操作数为真则返回第二个操作数,如果第一个操作数为假则返回第一个操作数(注意返回的是操作数原值,而不是转换后的布尔值)

io.print( true ? 123 ) //这里要求两者都为真,第一个操作数决定不了,所以返回第二个操作数的值(123)
io.print( false ? 123 ) //逻辑与要求两者为真,第一个操作已经能决定表达式不为真了,所以返回第一个操作数的值(false)

: —— 表示逻辑或(||、or)
逻辑或要求两个操作数其中之一取布尔值后为true,然后返回转换为布尔值等于true的操作数(注意返回的是操作数原值,而不是转换后的布尔值).

io.print( 0 : 123 ) //这里要求两者之一为true后,即返回为true的操作数,即显示123(0=false)
io.print( 1 : 123 ) //这里要求两者之一为true后,即返回为true的操作数,即显示1 (1=true)


aardio支持逻辑表达式的惰性求值,意即左操作数可以决定整个表达式的值,就不会再对右操作数求值。利用此特性,可以有条件的取得操作数的值。
test ? expression1 : expression2

?:为条件三元运算符,可以用作 if...else 语句的快捷方式,前面test表达式为ture时,就返回expression1表达式,text为false,就返回expression2表达式。(需注意的 expression1 和 expression2 表达式的布尔值均为true

io.print( false ? 2 : 3 ) //第一个表达式为false时,返回expression2表达式,即显示3
io.print( true ? 2 : 3 ) //第一个表达式为true时,返回expression1表达式,即显示2

使用逻辑操作符构建a?b:c的三元表达式时,如果a为真但是b为false返回的是c的原值, 这一点与C++的三元操作符略有区别。

习题  b=i ? 0 : 1 ? 0 : 1 ? 2
分拆来看:
b=
i =1 ? 0 : 1 (i=1表达式为true,第二个表达式是0 ,所以取值为1)
1 ? 0 : 1  (为1)
1 ? 2 (两者都为真,第一个操作数决定不了,所以返回第二个操作数的值,为2
最后b=2


习题 c=i ? 0: 1  
1? 0     =0
0 : 1    =1
所以  c=1



习题  d=i ? 1: 2
1? 1     =1
1 : 2    =1

所以 d=1


回复

使用道具 举报

3

主题

13

帖子

86

积分

一级会员

Rank: 2

积分
86
发表于 2011-9-8 22:47:15 | 显示全部楼层

加强知道,学习一下

加强知道,学习一下
回复

使用道具 举报

1

主题

9

帖子

150

积分

一级会员

Rank: 2

积分
150
发表于 2011-9-10 11:20:56 | 显示全部楼层

好啊,很好啊

好啊,很好啊
回复

使用道具 举报

15

主题

78

帖子

464

积分

二级会员

Rank: 3Rank: 3

积分
464
QQ
发表于 2012-10-5 22:31:57 | 显示全部楼层

这个帖子好,很基础的东西!赞一个

这个帖子好,很基础的东西!赞一个
人生就像一场游戏,选择比努力重要:选择正确,努力做正功;选择错误,努力做负功!
回复

使用道具 举报

15

主题

78

帖子

464

积分

二级会员

Rank: 3Rank: 3

积分
464
QQ
发表于 2012-10-5 23:05:16 | 显示全部楼层

[quote][size=2][color=#999999]qqmmcc 发表于 2011-9-8 16:59[/color] [url=forum.php?m

qqmmcc 发表于 2011-9-8 16:59
谢谢bob帮忙解释,我再补充一些资料,加深认识~

? —— 表示逻辑与(&&、and)

师兄,请教您一个问题:
n=n>m?m:n
是一个怎样的过程呢?
n>m 取boolean值,在同m“与”,取boolean后,再同n“或”?最后将值返还给n?是这样的过程吗?
人生就像一场游戏,选择比努力重要:选择正确,努力做正功;选择错误,努力做负功!
回复

使用道具 举报

75

主题

851

帖子

4982

积分

六级会员

The only one

Rank: 9Rank: 9Rank: 9

积分
4982
发表于 2012-10-6 23:01:15 | 显示全部楼层

[i=s] 本帖最后由 look 于 2012-10-6 23:02 编辑 [/i] [quote][size=2][color=#999999]ycdb 发

本帖最后由 look 于 2012-10-6 23:02 编辑
ycdb 发表于 2012-10-5 23:05
师兄,请教您一个问题:
n=n>m?m:n
是一个怎样的过程呢?
五、条件取值
逻辑或、逻辑运算符返回的不是转换后的布尔值,而是操作的原值,利用此特性,可以有条件的取得操作数的值。


io.open()

io.print( true ? 123 ) //显示123
io.print( false ? 123 ) //显示false
io.print( 0 : 123 ) //显示123
io.print( 1 : 123 ) //显示1

io.print(
false ? 2 : 3 ) //显示3
io.print( true ? 2 : 3 ) //显示2
io.print( true ? false : 3 ) //显示3
io.print( true && false || 3 ) //同上

使用逻辑操作符构建a?b:c的三元表达式时,如果a为真但是b为false,返回的是c的原值, 这一点与C++的三元操作符略有区别。

以上为aardio帮助文档-->aardio语言-->操作符--->>逻辑运算符  一章讲解的!

n=n>m?m:n的意思是:如果n大于m,则把m的值赋值给n,如果n不大于m,则把n的值赋值给n,也就是保持n值不变,
io.open();

var m=10;
var n=3;

n=n>m?m:n;
io.print(n);

execute("pause")
io.close();

小时候,幸福是一件东西,拥有就是幸福; 长大了,幸福是一个目标,达到就是幸福; 成熟后,发现幸福原来是一种心态,领悟就是幸福.
回复

使用道具 举报

15

主题

78

帖子

464

积分

二级会员

Rank: 3Rank: 3

积分
464
QQ
发表于 2012-10-7 11:36:18 | 显示全部楼层

[quote][size=2][color=#999999]look 发表于 2012-10-6 23:01[/color] [url=forum.php?mo

look 发表于 2012-10-6 23:01
以上为aardio帮助文档-->aardio语言-->操作符--->>逻辑运算符  一章讲解的!

n=n>m?m:n的意思是:如果n大 ...

谢谢老师!!
人生就像一场游戏,选择比努力重要:选择正确,努力做正功;选择错误,努力做负功!
回复

使用道具 举报

6

主题

37

帖子

339

积分

二级会员

Rank: 3Rank: 3

积分
339
发表于 2012-10-7 21:04:51 | 显示全部楼层

学习下

学习下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

手机版|未经许可严禁引用或转载本站文章|站长邮箱|aardio.com|aardio官方社区 ( 皖ICP备09012014号 )

GMT+8, 2018-1-20 18:56 , Processed in 0.078125 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表