`signed int`和`unsigned int`之间的加法

时间:2015-04-18 17:33:06

标签: c++

以下是来自" C ++ Primer"的示例。这表示signed intunsigned 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

1 个答案:

答案 0 :(得分:4)

这是一个非常无趣的例子。如何判断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");