1

私は学生であり、Cで関数を記述して、指定されたビットフィールドを符号拡張します。私は32ビットで作業しています。

この答えをGoogleで調べましたが、探しているものが見つかりませんでした。

私は、32intから引き出された1つ以上の連続するビットの2つの完全な表現を返す関数を書いています。左端のビットは符号ビットです。

1ビット引っ張ると何が返されますか?1ビットを符号付き2の補数としてどのように表現しますか?

4

2 に答える 2

1

私が理解しているように、32ビット変数のビットストリームからN個の任意のビット(N> = 1&<= 32)を取り出し、それらを2の補数として表します(おそらく、その数をsigned int32として返します)。 )。

これは、選択したビットを取得し、それらを作業変数の下位(つまり、右)の端に配置し、残りのビットを左方向に伝搬(コピー)して、左端の選択したビットを「拡張」することを意味します。作業変数の(以前は未定義の)ビット。これは、Nの特定の値を特殊なケースにする必要なしに、単一の一貫したアルゴリズムとして実行できます。

2ビットの場合、可能な値1、0、-1、および-2が生成されます(それぞれビットパターン01、00、11、および10の場合)。1ビットの場合、可能な値0と-1が生成されます(それぞれビットパターン0と1の場合)。

于 2012-09-03T01:25:05.780 に答える
0

1ビットの2の補数を話すことはあまり意味がありません。ビットが1つしかない場合は、0または1のいずれかになります。

一般に、Nビットの2の補数がある場合、表現可能な最大値は2^(N-1)-1であり、最小値は-2^(N-1)です。ばかげたことをしたい場合は、これをN = 1に適用でき、1ビットの2の補数は-1から0の範囲であることがわかります。

編集: あなたは書いた:

私は、32intから引き出された1つ以上の連続するビットの2つの完全な表現を返す関数を書いています。左端のビットは符号ビットです。

これは明確に定義されているとは思いません。 2の補数は、数学的な整数を一連のビットとして表すことができるエンコーディングです。整数を指定すると、格納するビットが示されます。一連のビットの2の補数表現がどうなるかわかりません。一連の任意のバイトのASCIIエンコーディングを提供するように求められている、またはゲティスバーグの住所をフランス語から英語に翻訳するように求められているようなものです。

于 2012-09-03T01:07:51.590 に答える