为什么Forth返回-1作为True的标志?

Spa*_*siu 5 forth

第四个代码

7 3 > . (7 > 3)
Run Code Online (Sandbox Code Playgroud)

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

Ash*_*eyF 19

-1所有位设置于是具有的益处在于词如and,or,not,...作为两个逻辑和按位运算符(相对于说使用C &&,||,!,...与&,|,~,...)

  • 这是OP问题的实际正确答案.它还允许主机CPU使用AND和OR而不是乘法和加法来做出无分支决策.例如,P1 A1和P2 A2 AND OR,如果Px是谓词并且Ax是相应的答案,则相对于其在C中的等价,A1*P1 + A2*P2.其他语言也使用-1表示真(BASIC,PL/I等),所以C在当时属于少数.可以把它想象成一个"签名的布尔值". (3认同)

Tom*_*mmy 5

根据1994 年标准

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

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