C ++将有符号转换为无符号,为什么呢?

时间:2018-11-03 19:36:03

标签: c++

#include <iostream>
#include <vector>

using std::cout;
using std::vector;
using std::endl;

int main() {

    vector<double> homework;
    homework.push_back(5.6);
    vector<double>::size_type size;
    size = homework.size();
    cout << size - 800 << endl;

}

输出:

$ ./a.out 
18446744073709550817

我知道有符号整数(和整体结果)将转换为无符号整数,并且由于下溢而导致的负结果产生正结果。

问:为什么要实现这种行为?为什么我在这里找不到正确的答案,即-799

1 个答案:

答案 0 :(得分:1)

这样做的原因是,涉及有符号和无符号类型的表达式会将所有操作数提升为无符号类型。

根据as-if rule,表达式size - 800也可以解释为size + (-800)(显然您的编译器已完成)。

因此-800变成一个非常大的正整数,并且该表达式给出了您所不期望的结果。