关于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的情况

posted @ 2012-12-10 17:57  Anbit自由之路  阅读(187)  评论(0编辑  收藏  举报