0

これは宿題の質問であり、私は完全にアイデアがありません(Cプログラミング)。

指示:

/* 
 * float_neg - Return bit-level equivalent of expression -f for
 *   floating point argument f.
 *   Both the argument and result are passed as unsigned int's, but
 *   they are to be interpreted as the bit-level representations of
 *   single-precision floating point values.
 *   When argument is NaN, return argument.
 *   Legal ops: Any integer/unsigned operations incl. ||, &&. also if, while
 *   Max ops: 10
 *   Rating: 2
 */
unsigned float_neg(unsigned uf) {

return 2;

私は単にreturn-ufに行ってみました。と他のことですが、私は何をすべきかわかりません。

ヘルプ?

次の条件が想定されます。

  1. 2の補数、整数の32ビット表現を使用します。
  2. 算術的に右シフトを実行します。
  3. 整数をワードサイズより大きくシフトすると、予期しない動作が発生します。

-編集

解決しました:uf^0x80000000を返します。

4

1 に答える 1

5

今のところ質問の不条理を無視して、質問は浮動小数点形式、おそらく Intel チップが使用する IEEE-754 標準について尋ねています。32 ビットの IEEE 番号のバイナリ形式は次のとおりです。

ここに画像の説明を入力

したがって、値を否定することは簡単です。最上位ビットをトグルする前に、Nan、Inf などのさまざまな特定の値を確認する必要があります。これらは IEEE 仕様に詳述されています。

+0 と -0 を指定できることに注意してください。

整数の否定を返すだけでは、2 の補数の否定が実行されるため機能しません。そのため、整数値 1 は 0xffffffff になり、FPU によって解釈されると、非常に異なる値になります。

于 2012-09-26T09:15:07.090 に答える