为了娱乐,我这么做了
1 1 RSHIFT . 0 ok
我可以在这里看到 native 类型与有意义的类型是成对的,因为(true 是 -1
)。然而这让我感到惊讶。
1 -1 LSHIFT . -9223372036854775808 ok
这是怎么回事?
最佳答案
首先,lshift
的参数被解释为无符号(因此,要移位的位数始终为非负)。在第二次,
上述意外的原因是一个不明确的条件。
摘自 6.1.1805 lshift
部分2012 年第四版标准:
An ambiguous condition exists if
u
is greater than or equal to the number of bits in a cell.
因此,这种情况下的结果取决于特定的 Forth 系统实现。您不应该依赖它。
请注意 stack notation 中的 u
表示无符号数字(单格),请参阅 table 3.1: Data types .
顺便说一句,在此类实验中使用二进制数字转换基数并通过 u.r
将数字打印为无符号是有用的。
#2 base !
1 #63 lshift #65 u.r
1 -#64 lshift #65 u.r
1 -#65 lshift #65 u.r
1 -#1 lshift #65 u.r
关于bit-shift - 第四为什么负 LSHIFT 会这样表现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48875974/