26

私はちょうど C# を学んでいて、データ型を詳しく調べています。

boolデータ型のサイズが 1 ビットでないのはなぜですか?

2 つの値 (true または false) のうちの 1 つしか保持できないようですが、その値を表すのに 1 ビットのスペースしか必要としませんか?

この投稿で言及されているように、値の最小の「アドレス指定可能な」サイズがバイト (8 ビット) であるためですか?

私の全体的な目的は、C# の各データ型のさまざまなサイズを論理的に想定することだったので、すべてのデータ型とそれらに割り当てられたビット サイズのリストを作成しようとしましたが、これは私を驚かせました。

4

3 に答える 3

25

値の最小の「アドレス可能な」サイズがバイトであるためですか

ええ、まったく同じことです。CLR を効率的にするために、コンパイラが C++ で行うのとほぼ同じ方法 (ほとんど) で、そのデータ型をネイティブ マシン データ型にマップします。

于 2013-07-19T11:50:53.480 に答える
4

スペース効率の良い方法で多くのフラグを保存する場合は、Int32 または Int64 をビットマスクとして使用することを検討してください。この方法では、32 または 64 のブール値フラグを 32 / 64 ビット データ型に保存できます。値を確認または設定するためにビットマスク テストを実行する必要があるため、ブール変数にアクセスまたは更新するためのわずかな追加コストが発生します。

メモリ内のブール フィールドのサイズは 1 バイトで、ブール変数のサイズは 4 バイトです。

BitArray は、多くのビット フラグを処理するのにも便利です: http://msdn.microsoft.com/en-us/library/system.collections.bitarray.aspx

于 2013-07-19T11:42:37.783 に答える
2

私もこれに気づきました... float[4000] と float?[4000] の 2 つの配列を作成しました。2 番目の配列は float? float と bool として実装され、bool は float と同じように 32 ビットを使用します。

したがって、最終的にメモリ使用量が懸念される場合は、float?[] を使用するよりも、NaN float 値を使用して float[] で「null」を表す方が適切です。

小さいデータ型を使おうとして、実際に何か良いことをしていると信じて何年もの間、私はばかのように感じます! :-)

于 2014-02-14T15:46:45.190 に答える