返回浮点数参数f的表达式-f的位级等价物

时间:2012-09-26 09:06:56

标签: c floating-point negate

这是一个家庭作业问题,我完全没有想法(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. 以算术方式执行右移。
  4.   
  5. 将整数移位更多时,行为无法预测    比单词大小。
  6.   

- 编辑

解决了它:返回uf ^ 0x80000000;

1 个答案:

答案 0 :(得分:5)

暂时忽略问题的荒谬性,问题是询问浮点格式,可能是英特尔芯片使用的IEEE-754标准。 32位IEEE编号的二进制格式为: -

enter image description here

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

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

简单地返回整数否定将不会起到预先形成2的补码否定的作用,因此整数值1变为0xffffffff,当由FPU解释时,它将是一个非常不同的值。