2017-11-30 22 views
0

構造体を使用すると、文字変数が宣言されます。私はその文字型変数のすべてのビットにアクセス(読み書き)したい。私はビットフィールドを使用して私の方法でそれを解決しました。コードは以下の通りです。しかし、もし私がそれらを印刷したい場合は、個別に呼び出す必要があります。私はループでそれらを呼び出すことができません。構造体ビットフィールドのデータ操作forループを使用

#include<stdio.h> 
struct SevenSegmentValue 
{ 
    unsigned char bit0:1; 
    unsigned char bit1:1; 
    unsigned char bit2:1; 
}; 

struct SevenSegmentValue abc[3]={{1,0,1},{0,1,1},{1,1,0}}; 

int main(void) 
{ 
    printf("Memory size occupied by status1 : %d\n", sizeof(abc)); 
    printf("Memory size occupied by status1 : %d\n", abc[2].bit0); 
    printf("Memory size occupied by status1 : %d\n", abc[2].bit1); 
    printf("Memory size occupied by status1 : %d\n", abc[2].bit2); 
} 
+1

CまたはC++? 2つはプログラムのセマンティクスでは必ずしも一致しません。あなたは「ちょうど」という理由でタグを付けてはなりません。 – StoryTeller

+0

なぜタグ 'C++' –

答えて

2

ビットフィールドの配列を作成できないため、ループできません。

あなたがunsigned char内のすべてのビットを印刷したい場合は、各ビットにアクセスするためのビットシフトを使用することができます。

unsigned char c = 0x32; 
int i; 
for (i=0; i<8; i++) { 
    printf("bit %d: %d\n", i, ((c >> i) & 1)); 
} 

出力:これは最下位ビットを印刷することを

bit 0: 0 
bit 1: 1 
bit 2: 0 
bit 3: 0 
bit 4: 1 
bit 5: 1 
bit 6: 0 
bit 7: 0 

注意最初。最上位ビットを最優先にしたい場合は、ループカウントをアップの代わりにダウンカウントしてください。

+0

私のコードを使ってできるのですか?私のコードを使ってはできないので.... –

関連する問題