1

32 ビット整数で格納された符号付き数値 (2 の補数) があり、それらから 16 ビット フィールドを抽出したいと考えています。32 ビットの符号付き数値から下位 16 ビットを抽出すると、元の (32 ビット) 数値が 16 ビットに収まる限り、結果は正しいというのは本当ですか?

正の数については自明ですが、負の数についても同様です。しかし、それは証明できますか?

前もって感謝します

4

2 に答える 2

3

はい、2 の補数では、符号ビットは「ずっと」左側に拡張されます。signed short を signed int にキャストすると、数値は「符号拡張」され、同じ値になります。

例:Nibble(-2) = 1110 => Byte(-2) = 1111_1110

明らかにその逆も当てはまります。少なくとも 1 つの符号ビットをキャプチャすると、数値の値は変更されません。

于 2008-11-03T08:41:56.660 に答える
0

あなたの質問を(2番目に)読んだところ、ビットを「抽出」する必要はないように見えますが、整数を変換する必要はありませんか?

つまり、次のようにします。

int negative = -4711;
short x = (short) negative;

この場合、コンパイラは、元の数値の精度が可能な限り代入で変換されるようにします。これは、基盤となるハードウェアが 2:s の補数を使用していない場合でも当てはまります。もしそうなら、Motti が説明したように、これは単なる切り捨てである可能性が高い.

于 2008-11-03T08:46:39.163 に答える