9

[これが存在しないのは奇妙に思われるので、重複している場合は事前にお詫びします]

Cで論理的同等性をテストしたい。言い換えると、2つの値が論理式に関連付けられた通常の方法で変換された場合、2つの値が等しくなるかどうかを知りたい。

C99では、

(bool)a == (bool)b

私が欲しいものを与えます。あれは正しいですか?従来のCでこれを書く通常の方法は何ですか?

4

4 に答える 4

11

通常、次のように表示されます。

if ((a == 0) == (b == 0))

または

if (!!a == !!b)

a が非ゼロの場合は 1 に評価され、それ!!a以外の場合は 0 に評価されます。

お役に立てれば!

于 2012-06-08T16:37:08.387 に答える
6

C では、ゼロは false です。任意の値を同等のブール値に変換する場合、標準的な方法 (ほとんど必要がないことを除いて) は、 の!!ように式の前に を付け!!aます。あなたの式の場合、次の !!a == !!b ように簡略化できます !a == !b

于 2012-06-08T16:40:02.753 に答える
2

C99 より前の C では、「bool にキャスト」する伝統的で慣用的な方法は with!!です。

于 2012-06-08T16:43:57.193 に答える
1

(bool)伝統的なcにはありません。True/False はints を使用して処理されます。ブール値が等しいかどうかを確認できます

a ? b : !b
于 2012-06-08T16:39:14.517 に答える