简答
为什么是 -1 而不是 1?
这只是一个约定
一些猜测...
选择此约定的原因可能与大多数平台上整数的内部表示有关:
假设一个布尔值存储在一个 16 位宽的整数中; false 是 0(每一位都未设置)。
0 => 00000000 00000000
同意另一个约定,其中true 全部设置为:
11111111 11111111
(一个非常合理的选择,因为所有1 是所有0 的按位NOT)
位全部设置的有符号整数的十进制表示为-1
-1 => 11111111 11111111
而1的二进制表示是
1 => 00000001 00000000(在小端平台上)。
这就是为什么-1 而不是1: 只是一个约定;但如果您查看值的二进制表示,您可能会同意约定是有意义的。
然而,尽管有上述所有考虑,但该公约远未得到普遍采用。在许多语言中,true 转换为数值是 1。
关于您发布的代码的重要说明:
你写的
A=(5=5)
A 是一个实数变量,其值由 5 个字节表示(1 表示指数,4 表示尾数)。
实际值0 的内部C64 表示是所有位0,但-1 的表示远不是所有位1。
(所有位 1 将导致值 -1.70141183e+38)
C64 Basic 再次遵循约定。
最后让我们解释一下代码中IF 语句的行为。
任何不同于0 的值在IF 语句中被评估为true(这发生在大多数语言上,也许是所有语言)。
底注:
如果您想查看 C64 变量的内部表示(整数或实数仅限,而不是字符串),您可以使用以下代码:
READY.
10 REM THE VARIABLE TO INSPECT
20 A=(5=5)
30 REM THE ADDR. OF THE FIRST VARIABLE
40 B=PEEK(45)+256*PEEK(46)
50 REM DISPLAY THE VAR'S 7 BYTES
60 FOR C=B TO B+6
70 PRINT C;": ";PEEK(C)
80 NEXT C
RUN
2227 : 65
2228 : 0
2229 : 129
2230 : 128
2231 : 0
2232 : 0
2233 : 0
注意前两个地址(2227、2228)存储变量的名称(65、0 代表A)
您可以尝试将变量声明为整数并查看结果
20 A%=(5=5)