syn*_*gma 6 c floating-point sign
来自Open Group Base Specifications Issue 7,IEEE Std 1003.1-2008:
当且仅当其参数值的符号为负时,signbit()宏才返回非零值.
为什么要signbit(-0)回来0?我只想了解这一决定背后的逻辑.
cHa*_*Hao 11
在二进制补码中,这是迄今为止最常见的有符号整数表示,没有负零的东西. -0 == +0在所有情况下,甚至是按位.因此,当宏的代码处理它时,即使它包含((float) -0),该符号已经消失.
如果你想测试,你可能会有更好的运气,如signbit(-0.0)或signbit(-1.0 * 0).由于此时您没有从整数转换,因此该数字仍应有符号.
Eri*_*hil 10
在signbit(-0):
0是类型的常量int.-0是否定的结果0,所以它是类型的零int.signbit(-0)产生0.如果你这样做signbit(-0.):
0.是类型的常量double.-0.是否定的结果0.,所以它是类型的负零double.signbit(-0.)产生1.关键是-0否定整数类型,并且整数类型通常不将负零编码为与正零不同.当整数零转换为浮点时,结果是一个简单的(正)零.但是,-0.否定浮点类型,并且浮点类型确实从正零明显编码负零.