为什么在MS Access数据库中“渊”的值为-1?
技术问答
292 人阅读
|
0 人回复
|
2023-09-14
|
我正在查看MS Access中的链接数据。
% C7 D% N$ [5 z“是/否”字段的值为-1(是)和0(否)。有人可以解释为什么将这种违反直觉的值用于“是”吗?(显然,它应该是1和0)0 u0 D: k* b) g) z9 E5 t
我想一定有一个很好的理由,我想知道。5 q0 g" V4 i5 E3 H' j/ o
3 o. P/ i% l5 `( O a- x& F6 N
解决方案:
8 u' }2 W: ]- [ $ G" [# ~2 z: P
4 u8 p) H( C, H( L7 J+ I5 L- J# Z
: p3 m, N# n1 B( A. g. @ Falseis的二进制表示形式0000000000000000(使用多少位取决于实现方式)。如果对它执行二进制NOT运算,它将被更改为1111111111111111,即True,但这是有符号integer的二进制表示形式-1。0 n' K5 q1 n+ ^. l
1最高位的一点表示带正负号的负数。改变数字的符号的方法是将所有位取反并加1。这称为“二进制补码”。
5 H- g X8 n; p% [+ p; Z让我们更改的符号1111111111111111。首先反转;我们得到: 0000000000000000* s; U) `- v# r) J$ g: X/ f+ W
然后添加一个: 0000000000000001,这是1。
$ S- [* o" d! R8 r5 m! Z1 _- S这就是的1111111111111111二进制表示形式的证明-1。
# p) H; i' ?2 l, L) n" w- s: A d7 g y$ w% Y7 z5 h
更新1 G3 o) [; T0 g# D% Q% l
另外,在比较这些值时,请不要进行比较. O& H) J# @! G
x = -1- j3 i' u; A! Q% }: @1 t
或者' }: W# Z4 P y& b$ ]5 x
x = 1# P3 n" C: l5 C" N3 h. @
相反,做比较
* x- d0 t+ T8 [/ u$ U# Lx 0- M$ f8 |' ?, s" r( v2 K( ^
这始终会给出正确的结果,而与所使用的约定无关。大多数实现将不等于零的任何值都视为True。 |
|
|
|
|
|