跳转到内容

Futurebasic/语言/参考/and

来自维基教科书,开放的书籍,开放的世界

运算符

[编辑 | 编辑源代码]

✔ 外观 ✔ 标准 ✔ 控制台

result& = exprA {and | &&} exprB

表达式 exprA 和表达式 exprB 各自被解释为 32 位整数。and 运算符对 exprA 中的每个位与其在 exprB 中对应位置的位进行 “按位比较”。结果是另一个 32 位量;结果中的每个位由以下方式确定

位值在
exprA
位值在
exprB
位值在
result&
0 0 0
1 0 0
0 1 0
1 1 1

在以下示例中,表达式在做出分支决策之前被评估为真或假。逻辑表达式 time>7 为真,因此被评估为 -1。表达式 time<8.5 为假,因此被评估为 0。然后执行按位比较 (-1) and (0),结果为零。最后,long if 语句将此零结果解释为 “假”,因此跳过第一个 print 语句。

time = 9.5
long if time > 7 and time < 8.5
   print "It is time for breakfast!"
xelse
   print "We have to wait 'til noon to eat!"
end if

以下示例显示了如何使用 AND 操作位

defstr long
print bin$( 923 )
print bin$( 123 )
print "--------------------------------"
print bin$( 923 and 123 )

程序输出

00000000000000000000001110011011
00000000000000000000000001111011
--------------------------------
00000000000000000000000000011011

在类似 if expr1 and expr2 then... 的语句中,即使每个单独的 expr 被评估为真,"expr1 and expr2" 也可能为假。考虑以下示例

JoeIsHere = 16
FredIsHere = 2
if JoeIsHere then print "Joe's here" else print "Joe's gone"
if FredIsHere then print "Fred's here"¬
  else print "Fred's gone"
long if JoeIsHere and FredIsHere
  print "They're both here"
xelse
  print "They're NOT both here!"
end if

程序输出

Joe's here
Fred's here
They're NOT both here!

这种奇怪的结果发生是因为表达式 "16 and 2" 评估为 0,然后被 long if 语句解释为 “假”。如果我们将 JoeIsHere 设置为 -1,并将 FredIsHere 设置为 -1,则不会发生这种情况,因为表达式 "-1 and -1" 评估为 -1。

nand; nor; not; xor; or; 附录 D: 数值表达式

语言参考

华夏公益教科书