adding unsigned int to int [duplicate]

北城余情 提交于 2019-12-01 06:50:19

问题


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

Executing this gives me 4294967260

I know there's a conversion taking place, from a signed int to unsigned int, but how and why this particular value? I noticed it's close to the sum of | 2147483647 | + 2147483647


回答1:


When an unsigned int and an int are added together, the int is first converted to unsigned int before the addition takes place (and the result is also an unsigned int).

-1, while being the first negative number, is actually equivalent to the largest unsigned number - that is, (unsigned int) -1 === UINT_MAX.

-2 in unsigned form is UINT_MAX - 1, and so on, so -40 === UINT_MAX - 39 === 4294967256 (when using 32bit ints).

Of course, adding 4 then gives your answer: 4294967256 + 4 = 4294967260.

This is a great quiz where you can learn some of the rules of integers in C (and similarly C++): http://blog.regehr.org/archives/721




回答2:


Represent i and a in hexadecimal:

i =   4: 0x 0000 0004
a = -40: 0x FFFF FFD8  

Following the implicit conversion rules of C++, a in a + i will be cast to unsigned int, that is, 4294967256. So a + i = 4294967260



来源:https://stackoverflow.com/questions/16728281/adding-unsigned-int-to-int

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!