什么是C ++的C#等价物
bool std::signbit( double arg );
此函数的C ++参考描述如下: 确定给定的浮点数arg是否为负数。 此函数检测零,无穷大和NaN的符号位。与std :: copysign一起,这个宏是检查NaN符号的唯一两种可移植方式之一。
signbit(+0.0) = false
signbit(-0.0) = true
答案 0 :(得分:4)
我不确定是否有内置功能,但这应该有效:
private static readonly long SignMask = BitConverter.DoubleToInt64Bits(-0.0) ^
BitConverter.DoubleToInt64Bits(+0.0);
public static bool signbit(double arg)
{
return (BitConverter.DoubleToInt64Bits(arg) & SignMask) == SignMask;
}
答案 1 :(得分:2)
从Microsoft CRT中的机器代码进行反向设计,保持快速:
public unsafe static bool stdsign(double d) {
ushort* pd = (ushort*)&d;
return (pd[3] & 0x8000) != 0;
}
通过我知道如何投掷的所有测试。假设小端架构。