-2

unsigned char変数の右端のビットに設定された位置から始まるビットでsetbits(x,p,n,y)戻る関数を作成する必要があります(他のビットは変更されません)。xnpny

たとえば、x = 10101010 (170 decimal)and y = 10100111 (167 decimal)and andn = 3p = 6言う場合は、3ビットを取り除き、答えを得る位置にy (111)配置する必要があります。x10xxx01010111010

この関数は、結果をバイナリ形式で出力する必要があります。

出力は次のようになります。

x = 10101010 (binary)
y = 10100111 (binary)
setbits n = 3, p = 6 gives x = 10111010 (binary)

こんにちは私はビットフィールドでこの問題に遭遇しました。
どうすればいいですか?

Typedef struct {
    unsigned char x:8;
    unsigned char y:8;
} var;
4

3 に答える 3

0

ビットフィールドは、これとは何の関係もない特定のCの発明です。たとえば、

struct RGB16 {
   unsigned int R : 5;
   unsigned int G : 6;
   unsigned int B : 5;
};

これは16ビット構造であり、それぞれが1バイトよりも小さい3つのコンポーネントがあります。ただし、C規格はそれらの相対的な位置については何も述べていません。それらがメモリ内にとして配置されていると想定することはできませんRRRRRGGGGGGBBBBB。さらに、ビットフィールド幅は一定であり、あなたの場合、必要なビットは可変です。したがって、「Cビットフィールド」をグーグルで検索しても、この問題は解決しません。

x & binary(11000011)問題については、真ん中の4ビットをゼロにし、真ん中の4ビットを1に設定することを知っておく必要がありy | binary(00111100)ます。

于 2011-02-28T09:39:01.103 に答える
0

charはビットフィールドで許可されている型ではありません。int型である必要があります。charを使用する場合は、C標準でカバーされていない実装定義の動作を呼び出しています(ISO 9899:19996.7.2.1§4を参照)。

したがって、使用しているシステムとコンパイラを知らずに質問に答えることは不可能です。

于 2011-02-28T09:59:59.847 に答える
-1

t = y <<(8-n)k = t >> p; x&k;を印刷

各ビットストリームが8ビットであると仮定します。

于 2011-02-28T09:39:33.857 に答える