ここには、ビットセットを使用して多くの 1 ビット値を char に格納するコードがいくつかあります。
基本的
struct BITS_8 {
char _1:1;
(...)
char _8:1;
}
今、私はこれらのビットの1つをパラメーターとして関数に渡そうとしていました
void func(char bit){
if(bit){
// do something
}else{
// do something else
}
}
// and the call was
struct BITS_8 bits;
// all bits were set to 0 before
bits._7 = 1;
bits._8 = 0;
func(bits._8);
解決策は、関数を呼び出すときにビットを選択することでした:
func(bits._8 & 0x80);
//do something
しかし、他のビットが設定されていたので、私は入り続けました。これが正しい動作なのか、コンパイラが壊れているのか疑問に思っていました。このコンパイラは、フリースケール ASIC 用のコードを生成する組み込みコンパイラです。
編集: 2 つの間違い: パラメータとそのビットの受け渡し。_8 は 0 でなければならず、そうでなければエラーは意味をなしません。
明確化
規格が課題について何を述べているかに興味があります
struct X{
unsigned int k:6;
unsigned int y:1;
unsigned int z:1;
}
X x;
x.k = 0;
x.y = 1;
x.z = 0;
char t = X.y;
または?t
を含む必要があります。1
b00000010