3

C(C99より前)では、ブール値は通常、次のように表されます。

typedef int bool;
#define true 1
#define false 0

なぜ「float」ではなく「int」として表されるのですか?

これは面接の質問ですが、なぜそんな質問をされるのだろうと思います!説得力のある答えはありますか?

4

4 に答える 4

6

bool値は主に比較で使用され、int型を使用すると、これらの比較に整数 ALUが使用されます。CPU の通常のパイプラインにあるため、非常に高速です。このfloat型を使用する場合は、浮動小数点ユニットを使用する必要があり、より多くのサイクルが必要になります。

boolまた、数式での型の使用をサポートしたい場合、つまり:

x = (4 * !!bool1) + (2 * !bool1);

不必要な分岐を避けるために、整数 ALU を使用すると、浮動小数点ユニットを使用するよりも高速になります。

上記のコードは、次の分岐コードと同等です。

if (bool1) {
   x = 4;
} else {
   x = 2;
}
于 2012-10-22T10:58:36.003 に答える
2

これが悪い考えである理由はたくさんあります。しかし、それが行われなかった理由、つまりそのように行われなかった歴史的な理由は、初期のコンピュータが浮動小数点ユニットを持っていなかったことです (さらに長い間、浮動小数点ユニットを持っていたものと持っていなかったものもありました)。

于 2012-10-22T10:56:26.840 に答える
1

C の_Bool/ bool(および C++ のbool) は、非常に単純な数値型であり、1 つとして動作するはずであり、charorのようなものよりも単純にすることはできませんint

intパフォーマンスまたは歴史的な理由から、一般的に選択されます。

代用floatするとそれが制限されます。と でafloatをシフトすることはできません。<<>>

&&, ||, ==, !=, >, <, >=,のような演算子の結果をシフトできるようにしたい場合があります。これは<=、C++ では!型であり、C では変装した (暗黙的に に変換される) /です。bool_Boolboolint

于 2012-10-22T11:17:39.800 に答える
1

他の回答で言及されている多くの理由(遅い、歴史的など)により、通常、浮動小数点数には「精度」の問題があることを追加したいと思います(参照:ウィキペディア)。これらの問題のすべてで、コンピューターに「真実」または「虚偽」を言わせたいのは誰ですか? あなたも望まないことを願っています。また、「ブール値」として使用するために「正確でない」ものを選択しても意味がありません。

于 2012-10-22T11:24:33.293 に答える