本文共 661 字,大约阅读时间需要 2 分钟。
#includeint main( ){ unsigned int a = 6; int b = -20; (a + b > 6) ? printf(">6") : printf("<=6"); return 0;}
整形(int)和无符号整形相加时,int先转化为unsigned int,b在内存中以-20的二进制补码形式存储。
执行a+b时,b要以unsigned int的形式读取内存中的数据,即将-20的补码按照unsigned int的形式理解读取(4,294,967,276)
也即:b = -20;先转化为 -20 + 2^32 = 4,294,967,276(unsinged int);此时与 a = 6相加必然大于 6
无符号数与有符号数做加法运算,先将有符号数转化为无符号数,然后做运算