[解決済み] なぜ、この構造体のサイズは2ではなく3なのですか?
2023-03-16 14:03:31
疑問点
この構造体を定義しました。
typedef struct
{
char A:3;
char B:3;
char C:3;
char D:3;
char E:3;
} col;
は
sizeof(col)
は 3 と出力していますが、2 ではないのでしょうか? もし、1 つの要素だけをコメントすれば
sizeof
3ビットの5つの要素は15ビットに相当し、それは2バイト未満です。
このような構造を定義する際に、"内部サイズ"があるのでしょうか?私のこれまでの言語の概念から、私は3バイトではなく2バイトのサイズを期待していたので、私はちょうど明確化が必要です。
どのように解決するのですか?
を使用しているため
char
を使用しているため、コンパイラはビットをバイト単位でグループ化しようとし、各バイトに8ビット以上入れることができないため、1バイトに2つのフィールドしか格納できません。
構造体が使用するビットの合計は 15 であるため、これだけのデータを格納するための理想的なサイズは
short
.
#include <stdio.h>
typedef struct
{
char A:3;
char B:3;
char C:3;
char D:3;
char E:3;
} col;
typedef struct {
short A:3;
short B:3;
short C:3;
short D:3;
short E:3;
} col2;
int main(){
printf("size of col: %lu\n", sizeof(col));
printf("size of col2: %lu\n", sizeof(col2));
}
上記のコード(私のような64ビットプラットフォームの場合)は、確かに
2
を返します。よりも大きいものについては
short
よりも大きい場合、構造体は使用される型の 1 つ以上の要素を埋めることはありません。したがって、同じプラットフォームでは、構造体は
int
の場合は 4、long
など。
関連
-
[解決済み】getline()が何らかの入力の後に使用されると動作しない 【重複あり
-
[解決済み】C++コンパイルタイムエラー:数値定数の前に期待される識別子
-
[解決済み] 解決済み] `pthread_create' への未定義の参照 [重複] [重複
-
[解決済み】c++で.txtファイルから2次元の配列に読み込む
-
[解決済み] using namespace std;」はなぜバッドプラクティスだと言われるのですか?
-
[解決済み] 要素ごとの加算は、結合ループよりも分離ループの方がはるかに高速なのはなぜですか?
-
[解決済み] なぜテンプレートはヘッダーファイルでしか実装できないのですか?
-
[解決済み] C++でクラスと構造体はいつ使い分けるべきか?
-
[解決済み] C++の'struct'と'typedef struct'の違い?
-
[解決済み] 構造体のsizeofは、なぜ各メンバーのsizeofの合計と等しくないのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C++でランダムな2倍数を生成する
-
[解決済み】変数 '' を抽象型 '' と宣言できない。
-
[解決済み] クラスにデフォルトコンストラクタが存在しない。
-
[解決済み】デバッグアサーションに失敗しました。C++のベクトル添え字が範囲外
-
[解決済み】cc1plus:エラー:g++で認識されないコマンドラインオプション"-std=c++11"
-
[解決済み】C++の余分な資格エラー
-
[解決済み】指定範囲内の乱数で配列を埋める(C++)
-
[解決済み] gdbを使用してもデバッグシンボルが見つからない
-
[解決済み] 警告:暗黙の定数変換でのオーバーフロー
-
[解決済み】Eclipse IDEでC++エラー「nullptrはこのスコープで宣言されていません」が発生する件