1

私はいくつかのタスクに小さな問題があります。

についてアンケート調査を行っています。1 回の調査結果 (1 人の回答者から取得) は、unsigned short 型の変数にエンコードされる次の情報を提供します (2 バイトから 16 ビットであると想定できます)。

  1. 性別 - 1 ビット - 2 つの可能性
  2. 婚姻状況 - 2 ビット - 4 つの可能性
  3. 年齢 - 2 ビット - 4 つの可能性
  4. 教育 - 2 ビット - 4 つの可能性
  5. 都市 - 2 ビット - 4 つの可能性
  6. 領域 - 4 ビット - 16 の可能性
  7. 答え - 3 ビット - 8 つの可能性

     unsigned short coding(int sex, int marital_status, int age, int edu, int city, int region, int reply){
    
        unsigned short result = 0;
    
        result = result + sex;
        result = result + ( marital_status << 1 );
        result = result + ( age << 3);
        result = result + ( edu << 5 );
        result = result + ( city << 6 );
        result = result + ( region << 11 );
        result = result + ( reply << 13 );
    
        return result;
    }
    

ここでは結果をエンコードします (正しいことを願っています) が、unsigned short x 内でエンコードした情報を表示する関数を準備する方法がわかりません。

まず、それをエンコードする必要があります:

     unsigned short x = coding(0, 3, 2, 3, 0, 12, 6);

次に、 unsigned short xからの情報を次の形式にデコードする別の関数を準備する必要があります。

    info(x);


    RESULT
    sex:                 0
    martial status:      3
    age:                 2
    education:           3
    city:                0
    region:              12
    reply:               6

どうやって始めればいいのか、何を探すべきなのかわからないので、あなたの助けに感謝します。

私の質問は、誰かが unsigned short コーディング機能をチェックして、void info(unsigned short x) の書き込みを手伝ってくれるかどうかです。

4

2 に答える 2

1

The solution is straightforward, and it's mostly text work. Transfer your data description

sex - 1 bit - 2 possibilities
marital status - 2 bits - 4 possibilities
Age - 2 bits - 4 possibilities
Education - 2 bits - 4 possibilities
City - 2 bits - 4 possibilities
region - 4 bits - 16 possibilities
answer - 3 bits - 8 possibilities

into this C/C++ structure:

struct Data {
    unsigned sex:        1; //  2 possibilities
    unsigned marital:    2; //  4 possibilities
    unsigned Age:        2; //  4 possibilities
    unsigned Education:  2; //  4 possibilities
    unsigned City:       2; //  4 possibilities
    unsigned region:     4; // 16 possibilities
    unsigned answer:     3; //  8 possibilities
};

It's a standard use case for bit sets, which is even traditional C, but also available in each standard-conform C++ implementation.

Let's name your 16-bit encoded data type for storage store_t (from the several definitions in use we use the C standard header stdint.h):

#include <stdint.h>
typedef uint16_t store_t;

The example Data structure can be used for encoding:

/// create a compact storage type value from data
store_t encodeData(const Data& data) {
    return *reinterpret_cast<const store_t*>(&data);
}

or decoding your data set:

/// retrieve data from a compact storage type
const Data decodeData(const store_t code) {
    return *reinterpret_cast<const Data*>(&code);
}

you access the bitset structure Data like an ordinary structure:

Data data;
data.sex = 1;
data.marital = 0;
于 2013-11-14T11:36:41.823 に答える