为什么在MS Access数据库中“渊”的值为-1?
技术问答
297 人阅读
|
0 人回复
|
2023-09-14
|
我正在查看MS Access中的链接数据。. ^. k, G' O% |2 [8 M; H; X
“是/否”字段的值为-1(是)和0(否)。有人可以解释为什么将这种违反直觉的值用于“是”吗?(显然,它应该是1和0)
- o @7 t2 @( d% C: }: K3 b我想一定有一个很好的理由,我想知道。
( p% ^; z. Q' o( Z$ ~+ x
' f R5 @2 z, p解决方案:3 O( x" T1 ?) q* Z9 R1 I) v# _0 Z
4 F( G% l- U: l: k4 e4 i
n' Q# @. o+ z: l( c n; H
6 j2 O$ D3 O2 E# j" C5 {
Falseis的二进制表示形式0000000000000000(使用多少位取决于实现方式)。如果对它执行二进制NOT运算,它将被更改为1111111111111111,即True,但这是有符号integer的二进制表示形式-1。: z0 U/ u* ^& L- _' @4 M
1最高位的一点表示带正负号的负数。改变数字的符号的方法是将所有位取反并加1。这称为“二进制补码”。
1 M2 p5 O7 x4 V* i8 c: |2 A7 `. v让我们更改的符号1111111111111111。首先反转;我们得到: 0000000000000000 a- _9 w% i+ _$ c" \7 G* ?. ~
然后添加一个: 0000000000000001,这是1。
( {% }; a4 x! H( o这就是的1111111111111111二进制表示形式的证明-1。
& l: s" o% U; C9 R
$ Y; I+ K, N) H! k8 Z- z更新
( }5 \! U1 G! D8 Y另外,在比较这些值时,请不要进行比较$ N1 Q5 x5 N* m$ ~0 p, E$ A ]7 P; p
x = -14 F" \% A/ H, T! d! a+ ?
或者
7 Q1 {0 L# `7 Y5 w! mx = 1
) u+ U! A6 L- K8 O+ m相反,做比较
, x- N) |4 E! Z0 Hx 0
1 F( ?! n* E: @) j% H* W. x这始终会给出正确的结果,而与所使用的约定无关。大多数实现将不等于零的任何值都视为True。 |
|
|
|
|
|