为什么在MS Access数据库中是“是”-1的值?

我正在查看MS Access中的链接数据。

“是/否”字段的值为“是”,否则为“0”。 有人可以解释为什么这样的反直觉价值被用于“是”吗? (显然,它应该是1和0)

我想一定有一个很好的理由,我想知道。

False的二进制表示是0000000000000000 (使用多less位取决于实现)。 如果你对它执行二进制NOT操作,它将被改为1111111111111111 ,即True ,但是这是有符号整数-1的二进制表示。

在最有意义的位置上, 1表示有符号数的负数。 改变数字的符号是通过反转所有位并加1.这被称为二进制补码 。

让我们改变1111111111111111的标志。 第一倒置; 我们得到: 0000000000000000

然后添加一个: 0000000000000001 ,这是1

这是1111111111111111-1的二进制表示的certificate。


UPDATE

另外,比较这些值时不要比较

 x = -1 

要么

 x = 1 

相反,做比较

 x <> 0 

这总是给出正确的结果,独立于所使用的惯例。 大多数实现将任何不等于零的值视为True

“是”是-1,因为它不是别的。

在处理微软产品时,特别是与Access一样古老的产品时,不要认为有任何deviseselect是有充分理由的。