浮点数的符号
有没有一种简单的方法来确定浮点数的符号?
我进行了实验并想出了这个:
#include <iostream>
int main(int argc, char** argv)
{
union
{
float f;
char c[4];
};
f = -0.0f;
std::cout << (c[3] & 0x10000000) << "n";
std::cin.ignore();
std::cin.get();
return 0;
}
其中(c [3]&amp; 0x10000000)为负数给出的值> 0但我认为这要求我做出以下假设:
机器的字节大8位
一个浮点数是4个字节大吗?
机器最重要的一点是
最左边的位(字节顺序?)
如果任何这些假设是错误的或者我错过了任何假设,请纠正我。
没有找到相关结果
已邀请:
8 个回复
功飘
它留给读者练习,以弄清楚如何测试浮点数是否为正。
镀建啼
来自
另一个有用的东西可能是#include
,如果它在您的系统/编译器上可用。
栖很钾是狠
念炯
,或者
很少,所以最好用
声明union并检查用0x80000000。 这个技巧只适用于非特殊的内存操作数。将其设置为XMM或x87寄存器中的
值将比直接逼近慢。此外,它不会处理像NaN或INF这样的特殊值。
甲车劲
视蕉梁拌客
?
疮痪徘弦漏
款去芳尾脊
本质上,您将浮点数中的字节视为无符号整数类型,然后右移除除了其中一个位(符号位)之外的所有位。 “>>”无论字节顺序如何都有效,因此绕过了这个问题。 如果可以确定预执行哪个无符号整数类型与浮点类型的长度相同,则可以缩写:
这适用于我的测试系统;有人看到任何警告或忽视'陷阱'?