Map*_*pan 1 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;
Run Code Online (Sandbox Code Playgroud)
我试过简单地返回-uf; 和其他事情,但我只是不知道该怎么做.
救命?
可以假设以下条件:
- 使用2s补码,32位整数表示.
- 算术地进行右移.
- 将整数移位超过字大小时,会出现不可预测的行为.
-编辑
解决了它:return uf ^ 0x80000000;
暂时忽略问题的荒谬性,问题是询问浮点格式,可能是英特尔芯片使用的IEEE-754标准.32位IEEE编号的二进制格式为: -

所以,否定价值是微不足道的.在切换顶部位之前,您必须检查各种特定值:Nan,Inf等; 这些在IEEE规范中有详细说明.
请注意,您可以使用+0和-0.
简单地返回整数否定将不会像预先形成2的补码否定那样工作,因此整数值1变为0xffffffff,当由FPU解释时,它将是一个非常不同的值.