为什么在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是有充分理由的。