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;

我试过简单地返回 -uf; 和其他事情,但我只是不知道该怎么做。

帮助?

可以假设以下条件:

  1. 使用 2s 补码,32 位整数表示。
  2. 以算术方式执行右移。
  3. 将整数移动超过字长时具有不可预测的行为。

-编辑

解决了:返回uf^0x80000000;

4

1 回答 1

5

现在忽略问题的荒谬性,问题是询问浮点格式,大概是英特尔芯片使用的 IEEE-754 标准。32位的IEEE数字的二进制格式是:-

在此处输入图像描述

因此,否定该值是微不足道的。在切换最高位之前,您必须检查各种特定值:Nan、Inf 等;这些在 IEEE 规范中有详细说明。

请注意,您可以有 +0 和 -0。

简单地返回整数否定是行不通的,因为它会执行 2 的补码否定,因此整数值 1 变为 0xffffffff,当 FPU 解释时,它将是一个非常不同的值。

于 2012-09-26T09:15:07.090 回答