7

私は少しポーズをとって投げられました、そして私は答えが何であるかわかりません。

基本的に-トライステートデータ型で使用する値の規則はありますか?グーグルをしていると、次のようには見えません。

  • -1 = False、0 =不明/未定義、+ 1 = True
  • 0 = False、+ 1 = True、+2=不明/未定義
  • -1 =不明/未定義、0 =偽、+1=真

..とりわけ。よく知られている規則がある場合は、それを使用したいと思います。そうでなければ私は1つを作ります:-)それは正しい答えがないかもしれませんが、私がもう少し深く掘り下げると思っただけです...

編集Microsoftが最近のコードで使用しているように見える
これも見つかりました:-1 = true、0 = false、2=不明。2 ==不明であるということは、デバッガー/ダンプ/メモリなどで生の値を見るときに+ 1 / -1を解釈する際のあいまいさを取り除くことを意味すると思います。奇妙なことに、このオプションはこの理由だけで魅力的です( 1のどのバリエーションが「真」を意味するかを忘れます)。

4

4 に答える 4

3

私の知る限り、そのための慣習はありません。

ブール値の規則は1つもありませんが、最も一般的なものは次のとおりです。

  • 0 = False、-1 = True
  • 0 =偽、1=真

関連するもう1つの一般的な(ただし普遍的ではない)規則は、未定義の値に-1を使用することです。

未定義に-1を使用することを選択した場合、False/Trueに0/1を使用できます。

  • -1=未定義
  • 0 = False
  • 1=真

そして当然のことながら、3番目の状態はもちろん未定義/不明ではなく、FileNotFoundである必要があります。;)

于 2011-06-07T11:34:25.530 に答える
3

あなたが付ける意味的な意味に関係なく、私はあなたの3つの値を、1つの負の数、1つの正の数、およびゼロとして選択します。これにより、単一のテストとブランチ(> 0、<0、== 0、> = 0、<= 0、!= 0)を使用して、3つの可能な値の可能な1要素または2要素のサブセットごとにメンバーシップの最適なテストが可能になります。 )。

于 2011-06-08T00:37:45.623 に答える
1

慣例のようなものはないと思いますが、これは何度も使用されているので、あなたが言及した3番目のケースをお勧めします。

Value       State
----------  ----------
 -1         Undefined
  0         False
 +1         True

純粋なブール状態はほとんどの場合として決定されるため、最初の2つのケースは好みません0 = False0 <> Trueしたがって、少し混乱する可能性があります。

于 2011-06-07T11:22:50.090 に答える
0

intを使用したトライステートブールの代替を探している場合は、標準を気にすることなく、いつでもnull許容ブールを使用できます。C#のようなものbool? triStateです。値はtrue、false、またはnullであり、不明と見なすことができますが、それはあなたが探しているものではないようです。

コンベンションについてはわかりません。ここで与えられた答えからではないことは間違いありません。私はあなたの3番目のものが好きです。

しかし、別の見方をすれば、私の選択は次のようになります。

{ True, Unknown, False } => 0, 1, 2 // going by enum like values...

編集:@LarsTechによる良い点の後、明確にする必要があります。変数に3つ以上の値が存在する可能性があることがわかっている場合は、その列挙型として考えたいので、それを{0、1、2}に変換できます。私は常に次のような列挙値のパターンに従います:「Good、Alright、Poor」。それは私には当然のことですが、多くの人にとって「0」を持つことは歓迎されません。常に逆の順序にすることができます。

于 2011-09-17T08:10:01.890 に答える