5

第四代代码

7 3 > . (7 > 3)

返回-1,但我曾经使用过的所有其他语言都用作1true 的标志。为什么是这样?造成这种差异的原因是什么?

4

3 回答 3

19

-1 是所有位的集合,它的好处是,诸如and, or, , ... 之类的词not可以用作逻辑运算符,也可以用作按位运算符(而不是说 C 带有, , , ... vs. , , , ...)&&||!&|~

于 2014-05-24T16:49:00.883 回答
5

根据1994 年标准

标志标志可能有两种逻辑状态之一,真或假。使用标志作为算术操作数的程序具有环境依赖性。标准字返回的真标志应是所有位都设置的单单元值。标准字返回的错误标志应是所有位都清除的单单元值。

true并非如此-1,所有位都已设置——与未设置位的逻辑相反。在您的特定环境中,所有位设置为-1,大概是因为您的计算机使用二进制补码算法。但它不必为了运行 Forth,因此true不必是-1.

于 2014-05-23T15:29:50.553 回答
0

这是因为所有处理器都有一个零分支指令,如果全是一个则不分支。

因此,如果您想要这样的构造:

test IF (some code) ELSE (other code) THEN 

您将使用分支到达(其他代码)部分。如果为零,则此分支将是一个分支,因此这意味着 0 是错误标志,反之则为

0 NOT 

这是全部,所以这意味着真实。

于 2016-06-18T14:39:51.760 回答