質問

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

正の数の場合、それは自明であり、負の数の場合も同様です。しかし、それは証明できますか?

事前に感謝

役に立ちましたか?

解決

はい、2の補数で符号ビットが「すべての方法で」拡張されます。左に。署名付きショートを署名付き整数にキャストすると、番号は" sign extended" になります。同じ値を持ちます。

例: Nibble (-2) = 1110 =>バイト(-2)= 1111_1110

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

他のヒント

質問の私の(2番目の)読み取りから、「抽出」する必要があるようには見えません。任意のビットでなく、整数を変換しますか?

つまりこのようなことをしてください:

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top