为什么在MS Access数据库中“渊”的值为-1?
技术问答
299 人阅读
|
0 人回复
|
2023-09-14
|
我正在查看MS Access中的链接数据。0 ^; ]: u, Z4 y0 M, D
“是/否”字段的值为-1(是)和0(否)。有人可以解释为什么将这种违反直觉的值用于“是”吗?(显然,它应该是1和0)
2 _! ?8 e% G) c3 G9 @4 m我想一定有一个很好的理由,我想知道。
2 r* i. C. E: G4 n: m & |) p. a/ ~% N4 i
解决方案:4 b3 _6 n2 j' _$ ^
; H8 n5 T. }6 c& T! B% I; [; {. \7 D- v9 P
$ w @1 ^' }! H4 n, b Falseis的二进制表示形式0000000000000000(使用多少位取决于实现方式)。如果对它执行二进制NOT运算,它将被更改为1111111111111111,即True,但这是有符号integer的二进制表示形式-1。$ r. _1 j: Q: g- B K: P
1最高位的一点表示带正负号的负数。改变数字的符号的方法是将所有位取反并加1。这称为“二进制补码”。
4 O H8 o( h+ N! c7 n( O让我们更改的符号1111111111111111。首先反转;我们得到: 00000000000000003 u# U# |: v; j4 n7 n
然后添加一个: 0000000000000001,这是1。* _8 l9 g$ w8 ?; a3 [4 g' Y: ^
这就是的1111111111111111二进制表示形式的证明-1。6 k% u# J5 x6 L) D. a$ k1 m
4 }% R% z, i; r* ]更新
/ g+ O# `: b" q6 q另外,在比较这些值时,请不要进行比较" k' ~' |, p4 W# D+ {( A
x = -10 t& E* v1 ~- N+ g& Q$ V; S8 o7 @
或者; H: L8 S' h* [
x = 1/ P5 {1 z! x3 I! E, C6 I# J) h
相反,做比较6 }% a6 T" X6 g% v
x 09 Q: t q+ z- G( l
这始终会给出正确的结果,而与所使用的约定无关。大多数实现将不等于零的任何值都视为True。 |
|
|
|
|
|