回答

收藏

为什么在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。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则