回答

收藏

为什么在MS Access数据库中“渊”的值为-1?

技术问答 技术问答 236 人阅读 | 0 人回复 | 2023-09-14

我正在查看MS Access中的链接数据。4 v, p0 U- Z5 U6 \
“是/否”字段的值为-1(是)和0(否)。有人可以解释为什么将这种违反直觉的值用于“是”吗?(显然,它应该是1和0)
+ ~( E( E; q( ~% l7 j# U我想一定有一个很好的理由,我想知道。
0 Z1 {- v. {% y1 X% M                * r' O& z& o, T
解决方案:
' T% C; J& D: e8 g                7 A; E# q$ X1 P
% |/ S1 C2 D6 E  D9 s5 `0 d
# ?, ^7 R: \  m  V  w" n" P
                Falseis的二进制表示形式0000000000000000(使用多少位取决于实现方式)。如果对它执行二进制NOT运算,它将被更改为1111111111111111,即True,但这是有符号integer的二进制表示形式-1。
$ [) r1 _# F& |2 s1最高位的一点表示带正负号的负数。改变数字的符号的方法是将所有位取反并加1。这称为“二进制补码”。
$ R* P, ]1 ?6 ^* B* o让我们更改的符号1111111111111111。首先反转;我们得到: 0000000000000000
% R9 O. `8 n1 R0 U1 J& a  N: M' {; G然后添加一个: 0000000000000001,这是1。6 F& L3 U; e  S& o, ^$ Y2 @) |# ^
这就是的1111111111111111二进制表示形式的证明-1。
4 O3 o* |* _% D# h5 q- z5 l3 ^
+ X  @3 `* S; D, I, b更新
6 y0 R4 ^9 r  V' {; X另外,在比较这些值时,请不要进行比较
/ H: ^! [! k$ x, _7 y7 `) B: Bx = -1
3 ~" J2 u4 ^, E+ a! R! v1 A  k或者
( F- F! y7 c& X" p% ?2 [x = 1
' {" y! ^# _4 _- J3 L相反,做比较
. x( Z" |4 c" q& ]1 mx  0* @* ~2 D6 C* Z( _% T! _+ I. Z
这始终会给出正确的结果,而与所使用的约定无关。大多数实现将不等于零的任何值都视为True。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则