-1 c++ integer twos-complement relational-operators
我有一个关于关系运算符的问题,它们总是给出正确的结果吗?因为如果我们运行这行代码,结果将是 1 而不是 0
cout<<(ULLONG_MAX==-1);
Run Code Online (Sandbox Code Playgroud)
如果我们继续两边都减 1,结果仍然是 1
所以这可能会在我们的程序中产生错误的结果
解决办法是什么?
在这次比较中
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有效)。
| 归档时间: |
|
| 查看次数: |
103 次 |
| 最近记录: |