c++ - 了解有符号与无符号比较

标签 c++ underflow

<分区>

有人能告诉我为什么 if 条件为假吗?

#include <iostream>
using namespace std;

int main(int argc, char *argv[])
{
    int a;
    unsigned int ua;

    a = -1;
    ua = a;

    cout << "ua: " << ua << endl;
    if (ua != -1)
        cout << "Is unsigned" << endl;
    else
        cout << "Is signed" << endl;

    return 0;
}

我的意思是,这里 ua == int_max_value,它不是 -1,但是当我运行它时,输出是

Is signed

最佳答案

!=== 在算术类型上对其操作数执行所谓的常规算术转换。与此处相关,给定一个 unsigned X 类型的操作数和一个 signed X 类型的操作数,其中 Xint< 之一longlong long,通常的算术转换会在比较发生之前将有符号操作数转换为无符号类型。

因此,当您比较 ua(unsigned int 类型)和 -1(signed int 类型>), -1 被转换为 unsigned int 类型(概念上,通过向其添加 232,假设 32 位 int ), 比较结果等于 ua 的值。

关于c++ - 了解有符号与无符号比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25518057/

相关文章:

c++ - 整数下溢导致模数失败

python - 防止Python浮点除法中的下溢

python - python中非常小的指数

c++ - 是否应该经常检查新运算符(operator)是否工作?

c++ - 多次分配内存是否会一次性花费更多时间?

c++ - 多个线程的随机数

java - Java Float 和 Double 数据类型中的上溢和下溢

android - Canvas restore() 在极少数情况下导致下溢异常

c++ - 使用指针将 2 个矩阵相乘

c++ - 使用 Dev-C++ 编译时出错