web-dev-qa-db-ja.com

MS Accessデータベースで「はい」の値が-1になるのはなぜですか?

MS Accessでリンクされたデータを見ています。

「はい/いいえ」フィールドには、YESの場合は-1、NOの場合は0の値が含まれます。そのような直感に反する値が「はい」に使用される理由を誰かが説明できますか? (明らかに、1と0でなければなりません)

正当な理由があるに違いないと思うので、それを知りたいです。

44
Supermitch

Falseのバイナリ表現は0000000000000000です(使用されるビット数は実装によって異なります)。バイナリNOT演算を実行すると、1111111111111111、つまりTrueに変更されますが、これは符号付き整数-1のバイナリ表現です。

最上位の1のビットは、符号付き数値の負の数を示します。数値の符号を変更するには、すべてのビットを反転して1を追加します。これは 2の補数 と呼ばれます。

1111111111111111の符号を変更しましょう。最初の反転。取得:0000000000000000

次に0000000000000001を追加します。これは1です。

これは、1111111111111111-1のバイナリ表現であったことの証明です。


[〜#〜] update [〜#〜]

また、これらの値を比較するときは比較しないでください

x = -1

または

x = 1

代わりに、比較してください

x <> 0

これにより、使用される規則に関係なく、常に正しい結果が得られます。ほとんどの実装は、ゼロ以外の値をTrueとして扱います。