#include<stdio.h>
#include<string.h>
int main(void)
{
unsigned j = 10;
int i = -20;
printf("%ud\n",i + j);
(i + j > 10000) ? (printf(">10000")) : (printf("<10000"));
printf("\n");
return 0;
}
/*
打印结果是 -10 >10000
int i = -20;
unsigned j = 10;
i + j的结果为什么是-10呢?负数加无符号整数结果不应该默认为无符号数吗?
-20
原码:1000 0000 0000 0000 0000 0000 0001 0100
反码:1111 1111 1111 1111 1111 1111 1110 1011
补码:1111 1111 1111 1111 1111 1111 1110 1100
加10: 0000 0000 0000 0000 0000 0000 0000 1010
结果:1111 1111 1111 1111 1111 1111 1111 0110
*/
经过查找资料得知无符号整数与整数运算时,通过补码加法运算后的结果的确是无符号整数,那为什么用printf打印结果还是-10呢?那是因为我使用的是%d输出,printf默认这个数是有符号整数,所以打印出了-10.如果你想打印的是无符号整数,应选用%ud打印。