1

2セットの値があります。それぞれ、0を含めて-15から+15の範囲です。

私はなんとか8ビットで2つの数字を表現することができました。これらのビットのうち4つは負のセットに属し、他の4つは正になります。

そのビットのシーケンスを読み取るときはいつでも、最初の4ビットが+か-かを判断できるようにしたいと思います。

パックとアンパックの両方にビット演算を使用してこれを実現する方法はありますか?または別の賢い方法?

前もって感謝します。

更新:これは、私が達成しようとしていることのサンプルです。

これらの31の値のうち、8ビットを使用して2つだけを表す必要があります。たとえば、14+と15+の数値があります。それらは両方とも正である場合もあれば、それぞれが1つある場合もありますが、両方が負になることはありません。したがって、14=1110および15=1111(すべての0を取り出します)。bitsequence = 11101111したがって、解凍すると、バイト239 = 11101111がわかります。実際には、ビットシーケンスを解析することにより、それぞれ14+と15+の数値を表します。しかし、どちらかの数値が負の場合、私は苦労しています。

4

2 に答える 2

4

ビットフィールドを使用すると、これを非常に簡単に行うことができます。

struct two_numbers
{
     signed char first : 4;
     signed char second : 4;
};

次に、通常のようにゼロと比較できます。

two_numbers t = { 7, -5 };
if (t.first < 0 || t.second < 0) { ... }

ただし、4 ビット フィールドは -15 または 15 ではなく、-8 から 7 までの値のみを許可することに注意してください。

于 2012-09-26T04:15:22.487 に答える
0

上位ビットを使用して負の数を表し、下位ビットを使用して正の数を表す 8 ビットの例を使用していると仮定しましょう。数値を 0xF0 に対してマスクし、結果がゼロ以外の場合、数値は負になります。

問題に対処する別の方法は、言語がバイト値に対して提供するメソッドをそのまま使用することです。次に、巧妙なことをする必要はありません。値がゼロ未満かどうかをテストするだけです。

于 2012-09-26T04:17:16.097 に答える