为什么在MS Access数据库中“渊”的值为-1?
技术问答
290 人阅读
|
0 人回复
|
2023-09-14
|
我正在查看MS Access中的链接数据。9 ?5 s6 Q: V4 b: l. I5 Z3 @- V% }
“是/否”字段的值为-1(是)和0(否)。有人可以解释为什么将这种违反直觉的值用于“是”吗?(显然,它应该是1和0)
1 o8 B, [) a: l. J( ^我想一定有一个很好的理由,我想知道。
! ? e# N- u& w" ]/ Q # R7 p" p2 A, F
解决方案:6 X' L* D) g) O! n0 v
2 H5 X5 S N+ ~1 j% |9 U
) i& Q+ o1 A& u% D U. S S" r# ^
7 i/ z0 m/ o8 k; b Falseis的二进制表示形式0000000000000000(使用多少位取决于实现方式)。如果对它执行二进制NOT运算,它将被更改为1111111111111111,即True,但这是有符号integer的二进制表示形式-1。+ e" l) b6 A8 n# @
1最高位的一点表示带正负号的负数。改变数字的符号的方法是将所有位取反并加1。这称为“二进制补码”。
8 r9 u Y$ E" D4 l让我们更改的符号1111111111111111。首先反转;我们得到: 0000000000000000
( K* V0 ?/ W; G然后添加一个: 0000000000000001,这是1。
9 J2 ~( l! R; c0 t# z/ F这就是的1111111111111111二进制表示形式的证明-1。
% f# _9 b1 K# c6 l- ]1 B
: w1 ]# A& P0 f2 `7 ?3 g; { \更新1 _4 h. i: k6 g3 H: T+ N2 {
另外,在比较这些值时,请不要进行比较
/ j& @9 x4 k# _4 t; ^; qx = -1
0 _7 @ Z% Z! q( t或者
! {" ^/ Q6 R. G4 H8 Zx = 1
" X5 i2 q" W# O6 e- H& H相反,做比较# q; Z B6 {* h- k
x 0
2 R$ V# f/ v/ Y( T, ~% p9 E! b$ N这始终会给出正确的结果,而与所使用的约定无关。大多数实现将不等于零的任何值都视为True。 |
|
|
|
|
|