0

データ型のようなものがないことを理解するにBOOLは、次のようにします。

std::cout << (1>2); //<<-- prints 0

この誤った比較が0であると仮定すると、比較の結果はどのデータ型deosになりますか?クイックグーグル検索を行っても結果は得られません。unsigned charこれは、0が実際にとして表される最小の最も基本的なデータ型であるためだと思い0x00ます。std::coutブードゥーが値を印刷可能な文字にするために何をするのかわからないので、私は何も仮定したくありません。

4

4 に答える 4

10

すべての関係演算子(、、、)の結果の型<><=>=とおりですbool

演算子<(より小さい)、>(より大きい)、<=(以下)、および>=(以上)はすべて、falseまたはを生成しtrueます。結果のタイプはですbool

タイプのオブジェクトにboolは値trueまたはがありますfalse。汎整数拡張では、aは次のようになる場所boolに変換できます。intfalse0true1

タイプのprvalueは、タイプのprvalueboolに変換でき、intゼロfalsetrueなり、1になります。

boolは積分型であり、標準では「純粋な2進記数法」を使用して表されるとされています。この表現を説明する脚注は、値trueとにどのようにマップされるかについてはかなり不明確ですが、の値表現がすべてのビットfalseであることを示唆していると想定できます。00

2進数の0と1を使用する整数の位置表現。連続するビットで表される値は加算され、1で始まり、2の連続する整数乗が乗算されます。ただし、おそらく最も高い位置にあるビットは除きます。(情報処理システムのためのアメリカ国立辞書から適応。)

于 2013-01-17T21:59:08.147 に答える
6

標準BOOLタイプはありませんboolが、標準の基本タイプです。

[C++11: 3.9.1/6]:タイプの値はまたboolはのいずれtruefalseです。[..]

関係比較の結果については、次のようになります。

[C++11: 5.9/1]:関係演算子は左から右にグループ化します。[..]オペランドは、算術型、列挙型、ポインタ型、または型である必要がありますstd::nullptr_t。演算子<(より小さい)、>(より大きい)、<=(以下)、および>=(以上)はすべて、falseまたはを生成しtrueます。結果のタイプはですbool

boolこれは、組み込み型がなく、関係比較の結果が次の型であるCでは同じではないことに注意してくださいint

[C99: 6.5/8]:<(より小さい)、>(より大きい)、<=(以下)、および>=(以上)の各演算子1は、指定された関係が真で0ある場合と偽である場合に生成されます。結果のタイプはint

于 2013-01-17T21:58:58.460 に答える
2

C ++標準、セクション5.9関係演算子、段落1は次のように述べています。

結果のタイプはですbool

于 2013-01-17T21:59:37.520 に答える
0

これはあなたの質問に対する直接の答えではありません:

ここで述べたように、C ++ではbool、cではintですが、あなたが考える部分は、比較結果を保存するために必要なメモリの量だと思いますか?

  • ご存知のように、データ型は割り当てられるメモリの量を定義します。

  • 注:たとえば、組み込みシステム環境では、標準のデータ型を直接使用する代わりに、ビット数を使用してプロジェクトでデータ型について話し、定義するために使用されるコンパイラ/プロセッサアーキテクチャとは異なるtypedef unsigned char uint8;場合があります(データ型からメモリサイズの定義)。したがって、別のコンパイラ/ターゲットプロセッサに簡単に移植できます

  • これを確認する必要があります:C ++でcharとboolが同じサイズであるのはなぜですか?

  • http://www.cplusplus.com/doc/tutorial/variablesの「Fundamentaldatatypes」セクションにある各データ型とそのサイズと範囲の表も確認する必要がありますが、彼は次のように述べています。

サイズと範囲の列の値は、プログラムがコンパイルされるシステムによって異なります。上記の値は、ほとんどの32ビットシステムで見られる値です。ただし、他のシステムの場合、一般的な仕様では、intはシステムアーキテクチャによって提案される自然なサイズ(1つの「ワード」)であり、char、short、int、およびlongの4つの整数型は、それぞれ少なくとも前の整数型と同じ大きさである必要があります。 charは常に1バイトのサイズです。同じことが浮動小数点型float、double、およびlong doubleにも当てはまり、それぞれが少なくとも前のものと同じ精度を提供する必要があります。

于 2013-01-17T22:51:55.417 に答える