我正在查看MS Access中的链接数据.
"是/否"字段包含值-1表示"是",0表示"否".有人可以解释为什么这样的反直觉值被用于"是"吗?(显然,它应该是1和0)
我想有一个很好的理由,我想知道.
Oli*_*bes 50
二进制表示False
是0000000000000000
(使用了多少位取决于实现).如果对它执行二进制NOT运算,它将被更改为1111111111111111
,即True
,但这是有符号整数的二进制表示-1
.
的位1
在最显著位置信号的符号数为负数.通过反转所有位并加1来改变数字的符号.这称为二进制补码.
让我们改变一下的标志1111111111111111
.首先反转; 我们得到:
0000000000000000
然后添加一个:
0000000000000001
,这是1
.
这是证明1111111111111111
是二进制表示的-1
.
UPDATE
此外,比较这些值时不要进行比较
x = -1
Run Code Online (Sandbox Code Playgroud)
要么
x = 1
Run Code Online (Sandbox Code Playgroud)
相反,做比较
x <> 0
Run Code Online (Sandbox Code Playgroud)
这总是给出正确的结果,与所使用的惯例无关.大多数实现都将任意值视为不等于零True
.
归档时间: |
|
查看次数: |
68383 次 |
最近记录: |