1

私は C# でアプリケーションを作成しており、0x0FF8,0xFFFAなどの 16 進数があります。

ここでは12 bit、右から左だけが必要です。のような数があるとし0x0FF8ます。で操作したいのですがFF8.(12 bits)、これは符号付きの数字です。

10進数は-8です。私のアプリケーションでは、最初に数値が負かどうかを確認する必要がありますか? そしてその後、その価値。

非常に高速に実行する必要があるため、C# で効率的に実行する方法がわかりません。数値表現は、リンクhttp://www.swarthmore.edu/NatSci/echeeve1/Ref/BinaryMath/NumSys.html0x0FF8= -8を参照してください。

4

2 に答える 2

4

ええと、

あなただけができる正しい 12 ビットを取得するには、

var right12 = 0x0FFF & yourNumber;

ネガティブかポジティブかを調べるには、

var positive = yourNumber >= 0;
var absoluteValue = Math.Abs(yourNumber); // Assuming yourNumber is Int32
var low12 = 0xFFF & absoluteValue;

これは、保持したい12ビットのビットマスクに対してビット単位で実行します

于 2012-09-20T10:38:33.453 に答える
1

符号付き整数値が負かどうかを確認するには、その左端のビットを確認する必要があります。ビットが設定されている場合、値は負です。

ただし、int は 32 ビットですが、12 ビットしかありません。したがって、12 ビットを int に入れると、20 ビットがゼロにリセットされます (つまり、設定されません)。そのため、左端のビット (#31) は設定されず、int 値は負の値として認識されません。

ビット #11 を確認し、11 番目が設定されている場合は 20 を設定する必要があります。

int Value = 0x0FF8;

// Check bit #11
if ((Value & 0x0800) != 0)
{
    // Set the 20 other bits to make the int value a negative one
    Value |= 0xFFFFF000;
}

int の代わりに short を使用して同じことを行うこともできます。short は 16 ビットしかないため、次のようになります。

short Value = 0x0FF8;

// Check bit #11
if ((Value & 0x0800) != 0)
{
    // Set the 4 other bits to make the short value a negative one
    Value |= 0xF000;
}

int バージョンは、コード内でのキャストを避けるために使用するのにおそらく最適です。

于 2012-09-21T00:50:15.267 に答える