C++含有无符号类型的表达式

img


那个u+i输出的那一长串数字是怎么算出来的,能不能按照书上说的32位系统讲解一下

两个不同类型数相加,按照有效位数大转换
i=-42 负数由补码表示,补码就是原码按位取反+1,最高位为一,源码二进制0010,1010,
补码的 二进制就是 1111,1111,1111,1111,1111,1111,1101,0110,16进制为ffffffd6
n=10 二进制就是 0000,0000,0000,0000,0000,0000,0000,1010,16进制就是 0a,
二者相加,结果16进制位 FFFFFFE0,转为10进制无符号数为4294967264

那个0xffffffff也就是4294967295是2的32次方-1,在有符号数里是-1
而10-42=-32,因此就是这个数字-31,就是4294967264

因为u是无符号的,所以i也会转换为无符号的进行相加。-42是负数,最高位是1,所以转换为无符号后,是一个很大的正整数,等于32位的最大值减去42