关系运算符精度

-1 c++ integer twos-complement relational-operators

我有一个关于关系运算符的问题,它们总是给出正确的结果吗?因为如果我们运行这行代码,结果将是 1 而不是 0

cout<<(ULLONG_MAX==-1);
Run Code Online (Sandbox Code Playgroud)

如果我们继续两边都减 1,结果仍然是 1

所以这可能会在我们的程序中产生错误的结果

解决办法是什么?

Ted*_*gmo 5

在这次比较中

ULLONG_MAX == -1
Run Code Online (Sandbox Code Playgroud)

你有一unsigned long long和一int。在比较值之前,操作数会进行积分提升,其中int被提升为unsigned long long,这就像做static_cast<unsigned long long>(-1)两个操作数具有共同类型一样。

现在, anunsigned long long无法保存该值-1,然后它将“环绕”以成为可能的最大值unsigned long long- 这正是该值ULLONG_MAX所保存的。

因此,比较true和打印true将显示1(除非std::boolalpha有效)。