有符号零和无符号零 c++ 之间的排序

Sorting between signed and unsigned zeros c++

本文关键字:之间 c++ 排序 无符号 符号      更新时间:2023-10-16

我必须能够对我在大学使用 C++ 完成的作业对负零和负零进行排序,有人可以告诉我为什么以下代码确实会产生负零吗? 我被困住了,我不确定为什么这有效...

        cout << "Enter the number of elements you want to add to the vector:n";
    cin >> x;
    cout << "Enter the integers: n" << endl;
    for (int i = 0; i < x; i++)
    {
        cin >> y;
        y = y - 0.0;
        cout << y; 
        Array.push_back(y);
    }

如果在对上述向量进行排序时有更好的方法来产生负零,请告知。非常感谢!

首先,标准C++中不需要有任何负零,所以我假设你说的是 IEEE-754 的负零,这是大多数(我从未遇到过例外(C++实现基于他们的浮点数学。

在这种情况下,表达式

y = y - 0.0;

只有在该分配之前y == -0.0或将舍入模式设置为"舍入到 -finity">(通常不会(时,才会产生-0.0

要实际生成具有值 -0.0double,您只需分配所需的值:

double d = -0.0;

现在d == -0.0 IEEE 浮点数学。

然而,作为

比较应忽略零符号

(IEEE 754-1985, 5.7.比较(,-0.0 < 0.0会产生false,所以如果你真的想在正零之前对负零进行排序,你需要编写自己的比较器,可能使用 std::signbit


附录:相关标准报价:

当两个操作数之和具有相反符号(或两个的差值(时 带有类似符号的操作数(正好为零,该和(或差(的符号 在所有舍入模式下应为 +,但向 –无穷大舍入除外,其中 该符号的模式应为 –。

IEEE 754-1985, 6.3 (符号位(