无符号减法:int和short存在天壤之别,无符号整形的减法结果为负值时自动转换为无符号类型,而无符号短整形减法结果为负值时转换为有符号类型。以下为代码比较:
#include <stdio.h>
int main(void)
{
unsigned int i, j;
unsigned short m, n;
//int型减法
i = 5;
j = 10;
printf("int型减法结果...\n");
if ((i - j) > 10000)
{
printf("(5-10) > 10000\n");
}
else
{
printf("(5-10) < 10000\n");
}
//short型减法
m = 5;
n = 10;
printf("short型减法结果...\n");
if ((m - n) > 10000)
{
printf("(5-10) > 10000\n");
}
else
{
printf("(5-10) < 10000\n");
}
}
int型减法结果...
(5-10) > 10000
short型减法结果...
(5-10) < 10000
请按任意键继续. . .
我觉得应该这样写比较好:
#include <stdio.h>
int main(void)
{
unsigned int i, j, tmp1;
unsigned short m, n, tmp2;
//int型减法
i = 5;
j = 10;
printf("int型减法结果...\n");
tmp1 = i - j;
if (tmp1 > 10000)
{
printf("(5-10) > 10000\n");
}
else
{
printf("(5-10) < 10000\n");
}
//short型减法
m = 5;
n = 10;
printf("short型减法结果...\n");
tmp2 = m - n;
if (tmp2 > 10000)
{
printf("(5-10) > 10000\n");
}
else
{
printf("(5-10) < 10000\n");
}
}
打印结果:
int型减法结果...
(5-10) > 10000
short型减法结果...
(5-10) > 10000
请按任意键继续. . .