我有一个关于关系运算符的问题 他们总是给出正确的结果吗? 因为如果我们运行这行代码,结果将是 1 而不是 0
cout<<(ULLONG_MAX==-1);
如果我们继续两边都减 1,结果仍然是 1
因此这可能会在我们的程序中给出错误的结果
有什么解决办法
非常感谢。
在这个比较中
ULLONG_MAX == -1
您有一个
unsigned long long
和一个 int
。在比较值之前,操作数会经历整数提升,其中int
提升为unsigned long long
,这就像执行static_cast<unsigned long long>(-1)
一样,使两个操作数具有共同的类型。
现在,
unsigned long long
无法容纳值-1
,然后它将“环绕”成为最大可能的unsigned long long
- 这正是ULLONG_MAX
所容纳的值。
因此比较是
true
并且打印 true
将显示 1
(除非 std::boolalpha
有效)。