关系运算符精度

问题描述 投票:0回答:1

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

cout<<(ULLONG_MAX==-1);

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

因此这可能会在我们的程序中给出错误的结果

有什么解决办法

非常感谢。

debugging c++17 twos-complement
1个回答
0
投票

在这个比较中

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
有效)。

© www.soinside.com 2019 - 2024. All rights reserved.