在“有符号的 int”和“无符号的 int”之间进行添加

Addition between `signed int` and `unsigned int`

本文关键字:int 之间 添加 无符号的 有符号的 符号 无符号      更新时间:2023-10-16

这是"C++ Primer"中的一个例子,它表明signed int在添加unsigned int时将自动转换为unsigned int。但我得到的结果似乎是,unsigned int被投到了signed int。谁能告诉我为什么?

法典:

#include <iostream>
using namespace std;
int main() {
    int i = -1;
    unsigned int u = 10;
    cout << i + u << endl;
    return 0;
}

结果:

9

这是一个

非常无趣的例子。你怎么知道9signed还是unsigned int(或longshort或......)?它在所有这些类型的范围内。

下面是一个更好的示例:

int i = -12;
unsigned int u = 10;
cout << i + u << endl; // prints 4294967294

或者真的:

static_assert(is_same<decltype(i+u), unsigned int>::value,
              "wat");