次のコードを実行すると、奇妙な動作が見られます。構造体を使用してビットフィールドを作成します。52 ビットを使用したいので、long int を使用します。私のシステムでは long int のサイズは 64 ビットです。コード内で確認します。どういうわけか、1ビットを設定しようとすると、常に2ビットが設定されます。そのうちの 1 つは私が設定したかったもので、2 番目は最初のインデックスに 32 を加えたものです。
#include <stdio.h>
typedef struct foo {
long int x:52;
long int:12;
};
int main(){
struct foo test;
int index=0;
printf("%ld\n",sizeof(test));
while(index<64){
if(test.x & (1<<index))
printf("%i\n",index);
index++;
}
test.x=1;
index=0;
while(index<64){
if(test.x & (1<<index))
printf("%i\n",index);
index++;
}
return 0;
}
Sryは出力を投稿するのを忘れていたので、私の質問は基本的に理解できませんでした...出力は次のとおりです。
8
0
32