1

これは宿題の質問です。

符号なし 8 ビット数値を 32 ビット符号付き数値に変換する必要があります。

たとえば、次の符号なし 8 ビット数があります。1111 1010

したがって、32ビット署名では、1111 1111 1111 1111 1111 1111 1111 1010

これどうやってするの?符号付き int の場合にのみ 1 でパディングされることを知っている>>ので、ビットを右にシフトする前に符号付き int にキャストすることができます。

唯一のことは、「1つの減算とともに、左右のシフトのみを使用する」関数を作成する必要があると述べている問題に制限があることです。

4

3 に答える 3

-1

署名された8ビットを介してキャストするとうまくいくはずですか?

uint8_t start = 0xFF;
int32_t end = (int8_t)start;

それとも、宿題の中でそれをすることは許可されていませんか?

その場合、右シフトが符号拡張を行うため、上にシフトしてから下にシフトすると機能します。

uint8_t start = 0xFF;
int32_t end = (start << 24) >> 24;
于 2013-02-06T04:02:55.767 に答える
-3

適切な 32 ビット マスクが必要です。そして、マスクの右端の 8 ビットを 8 ビットの unsigned int として設定します。これにより、結果が得られます。

最初に yuo は自分でコードを試してから、助けを求めてください。

于 2013-02-06T04:03:47.630 に答える