关于unsigned 的算术转换
#include <stdio.h>
int main()
{
int i = 1;
unsigned int j = -1;
int kk = i + j;
unsigned int kkk = i + j;
printf("%d %u\n", kk, kkk);
if(-1 < (unsigned char)1)
{
printf("-1 < 1\n");
}
else
{
printf("-1 > 1\n");
}
if(i < j)
{
printf("1 < -1\n");
}
else
{
printf("1 > - 1\n");
}
return 0;
}
VS2010输出结果如下:
0 0
-1 < 1
1 < -1
因为在执行算术运算时,操作数的类型如果不同,就会发生转换。
1.浮点类型朝着精度更高,长度更长的方向转换,如float转换为double
2.整型数如果转换为signed不丢失信息,就转换为signed,否则转换为unsigned。但在K&R C采用了无符号保留原则,即只要是无符号与有符号混合使用,结果就是无符号类型。
3.在signed int 和 unsigned int 之间做测试相等性,signed int 自动升级为unsigned int类型,所最后会出现1 < -1的情况