我正在查看 MS Access 中的链接数据。
“是/否”字段包含值 -1(是)和 0(否)。有人可以解释为什么这样一个反直觉的值用于"is"吗? (显然应该是1和0)
我想一定有一个很好的理由,我很想知道。
请您参考如下方法:
False
的二进制表示为 0000000000000000
(使用多少位取决于实现)。如果对其进行二进制 NOT 运算,则会变为 1111111111111111
,即 True
,但这是有符号整数 -1< 的二进制表示
.
最高有效位置的一位 1
表示有符号数的负数。通过反转所有位并加 1 来更改数字的符号。这称为 Two's complement .
让我们改变1111111111111111
的符号。首先反转;我们得到: 0000000000000000
然后添加一个: 0000000000000001
,这是1
。
这是 1111111111111111
是 -1
的二进制表示的证明。
更新
此外,比较这些值时不要比较
x = -1
或
x = 1
相反,进行比较
x <> 0
这总是给出正确的结果,与所使用的约定无关。大多数实现将任何不等于零的值视为True
。