int i=-20 unsigned int j=10 i+j=?

来源:百度知道 编辑:UC知道 时间:2024/05/03 15:59:20
我想要具体的解释。为什么会得出这么大的一个数。这和int,unsigned int 在内存中存储的方式有什么关系。

1、int和unsigned int运算时int会自动转成unsigned int
2、int和unsigned int都是4字节(32位情况下)存储,区别是int最高位是符号位,用来表示正负
3、负数用补码存储,-20存储为11111111111111111111111111101100,这个东西转为unsigned int后就是一个很大的数4294967276了,所以最后结果是4294967286

因为此中间存在一个类型自动转换的问题,在int和unsigned int类型的数相加时,会自动将int类型的数转换为unsigned int类型然后再相加,计算机中数值是以其补码存储的,所以负数的值,计算机存储的二进制值其实是很大的。

所以-20转换为一个无符号数,会得到一个很大的数,因此若两数相加也会得到一个很大的数。例如:你可以试下试,那j=10 更改为j=30就会发生溢出问题。

不会大,只有-10;
unsigned int只是表示这个整型非负数.和int在内存中存储的方式是一样的.

int运算时int会自动转成unsigned int
所以结果为-10。