C(C99より前)では、ブール値は通常、次のように表されます。
typedef int bool;
#define true 1
#define false 0
なぜ「float」ではなく「int」として表されるのですか?
これは面接の質問ですが、なぜそんな質問をされるのだろうと思います!説得力のある答えはありますか?
bool
値は主に比較で使用され、int
型を使用すると、これらの比較に整数 ALUが使用されます。CPU の通常のパイプラインにあるため、非常に高速です。このfloat
型を使用する場合は、浮動小数点ユニットを使用する必要があり、より多くのサイクルが必要になります。
bool
また、数式での型の使用をサポートしたい場合、つまり:
x = (4 * !!bool1) + (2 * !bool1);
不必要な分岐を避けるために、整数 ALU を使用すると、浮動小数点ユニットを使用するよりも高速になります。
上記のコードは、次の分岐コードと同等です。
if (bool1) {
x = 4;
} else {
x = 2;
}
これが悪い考えである理由はたくさんあります。しかし、それが行われなかった理由、つまりそのように行われなかった歴史的な理由は、初期のコンピュータが浮動小数点ユニットを持っていなかったことです (さらに長い間、浮動小数点ユニットを持っていたものと持っていなかったものもありました)。
C の_Bool
/ bool
(および C++ のbool
) は、非常に単純な数値型であり、1 つとして動作するはずであり、char
orのようなものよりも単純にすることはできませんint
。
int
パフォーマンスまたは歴史的な理由から、一般的に選択されます。
代用float
するとそれが制限されます。と でafloat
をシフトすることはできません。<<
>>
&&
, ||
, ==
, !=
, >
, <
, >=
,のような演算子の結果をシフトできるようにしたい場合があります。これは<=
、C++ では!
型であり、C では変装した (暗黙的に に変換される) /です。bool
_Bool
bool
int
他の回答で言及されている多くの理由(遅い、歴史的など)により、通常、浮動小数点数には「精度」の問題があることを追加したいと思います(参照:ウィキペディア)。これらの問題のすべてで、コンピューターに「真実」または「虚偽」を言わせたいのは誰ですか? あなたも望まないことを願っています。また、「ブール値」として使用するために「正確でない」ものを選択しても意味がありません。