-4

高、低、現在の 3 つの温度からなる複雑な temp という名前の整数が与えられます。高値の場合はビット 0 ~ 9、低値の場合は中間の 10 ~ 19、現在の温度の場合は 20 ~ 29、エラーの場合は 2 ビットを取得する必要があります。どうすればいいのかわかりませんが、ビット演算子が関係していることはわかっています。

4

2 に答える 2

3
int high = temp & (2^10-1);
int middle = (temp >> 10) & (2^10-1);
int low = (temp >> 20) & (2^10-1);
于 2013-03-21T01:13:43.527 に答える
0

ビット単位の操作を行うことも、データ型と指定されたパターンのビット フィールドを含むユニオンを作成することもできます。あとは、データ型をユニオンに追加し、ビットフィールド データ型からビットを読み取るだけです。

ビットフィールドは移植できない場合があることに注意してください。

union helper
{
    struct
    {
          int low : 10;
          int current : 10;
          int high : 10;
          int error : 2;
     };
     int temp;
};

利用方法:

Helper h;
h.temp = input;
int low = h.low;
int current = h.current;
int high = h.high;
int error = h.error;

このソリューションの利点は、非常に読みやすく、コンパイラーが各変数を読み取るためのビット操作を自動的に生成することです。

于 2013-03-21T01:13:23.090 に答える