将unsigned int添加到int

3 c++ int types unsigned-integer

#include <iostream>
int main ()
{
    using namespace std;
    unsigned int i = 4;
    int a = -40;
    cout<<a+i<<endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

执行这个给了我4294967260

我知道有一个转换发生,从signed int到unsigned int,但是这个特殊值的方式和原因是什么?我注意到它接近于|的总和 2147483647 | + 2147483647

Way*_*oda 9

当a unsigned int和a int加在一起时,int首先将其转换为unsigned int加法发生之前(结果也是a unsigned int).

-1,作为第一个负数,实际上相当于最大的无符号数 - 即(unsigned int) -1 === UINT_MAX.

无符号形式的-2是UINT_MAX - 1,依此类推-40 === UINT_MAX - 39 === 4294967256(当使用32位整数时).

当然,添加4然后给出你的答案: 4294967256 + 4 = 4294967260.

这是一个很棒的测验,你可以在其中学习C中的一些整数规则(以及类似的C++):http://blog.regehr.org/archives/721

  • 为什么 `int` 被转换为 `unsigned` 而不是这样? (2认同)