在Forth语言中的逻辑AND运算?

14

我知道AND这个词定义了二进制的and......但是什么定义了逻辑and

2个回答

13

同样的单词AND也用于逻辑and。但是建议AND的两个输入值为格式正确的标志,其中truefalse由两个值表示:所有位设置为(-1)和所有位未设置(0)。除了这些值之外的其他值可能会像在C语言中一样起作用,但可能导致微妙的错误。

所有比较运算符都返回格式正确的标志,但例如-不会。以下表达式求值为false (0)。

7 5 - 7 3 - AND

AND 会获取位模式 100 和 010。结果为0(因为它进行了按位 运算)。

参考资料:

  1. 《逐位学 Forth》中的“Forth中的位操作”部分。
  2. 《Starting Forth》第四章的“一点逻辑”部分。

1
不了解足够的Forth语言知识来判断这是否有效,但是位模式0xFF00和0x00FF进行按位与运算得到0x0000,但逻辑与运算结果为True(因为两者都非零)。 - SingleNegationElimination
@TokenMacGuy:谢谢!这正是我在寻找的一个例子。我已经更新了答案。 - Peter Mortensen

0

位运算 AND 是针对 64 位值的按位与操作。当然,这些运算符与掩码一起使用效果很好。但如果这些值都是全 1 或全 0,则结果也是全 1 或全 0(位运算 OR 和 XOR INVERT 操作同理)。

Forth 中的布尔标志为全 1 或全 0。因此,如果输入是布尔标志,则 AND、OR、XOR 和 INVERT 的输出也是布尔类型,这些运算符可以用于代表布尔运算符。请注意,像 = < 0= 这样的操作会产生布尔标志。

+ 的情况与之相同。因为整数被定义为二补数,所以 +(加)可用于有符号和无符号数字的加法。因此,没有单独的名称来表示整数的无符号加法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接